Unterschiede bei der Ausführung von Python-Skripten

8

Ich habe eine sehr einfache Python-Frage, mit Beispielen, die Django verwenden. Muss ich beim Ausführen eines Python-Skripts dem Skriptdateinamen immer den Befehl python voranstellen?

Im Django-Tutorial, dem ich folge, sind einige Befehle wie folgt:

%Vor%

Allerdings sind andere wie folgt:

%Vor%

Warum benötigt der oberste Befehl nicht den Befehl python ?

Oder, wenn mein System weiß, dass alle Python-Skripte von meinem Python-Interpreter ausgeführt werden sollen, warum benötigt der untere überhaupt den Befehl python ?

    
Karnivaurus 17.02.2014, 17:23
quelle

2 Antworten

3

Die Antwort liegt in einer Kombination von zwei Dingen:

  1. Der Shebang , die erste Zeile einer Datei.
  2. Die Berechtigungen für die Datei, dh ob das ausführbare Flag gesetzt ist oder nicht.

Betrachten Sie die erste Zeile von django-manage.py . Auf meinem System ist es bei /usr/local/bin/django-admin.py und die erste Zeile ist:

%Vor%

Und die Berechtigungen für die Datei:

%Vor%

Der Shebang sagt meinem Betriebssystem, dass ich die Datei mit dem Interpreter bei /usr/bin/python2.7 ausführen möchte. Die Zeichen x in den Berechtigungen geben an, dass es sich um eine ausführbare Datei handelt. Ich muss python nicht vorher angeben, weil das OS das Zeug automatisch von den oben genannten Informationen herausfinden kann.

Nun für ein frisch erstelltes manage.py , das ich gemacht habe, indem ich django-admin.py startproject mysite ausgeführt habe, sieht es so aus:

%Vor%

Und die Berechtigungen:

%Vor%

Der Shebang gibt an, den Python-Interpreter zu verwenden, auf den mein env zeigt, so dass dieser Teil bereits vorhanden ist. Da die Datei jedoch keine ausführbaren Berechtigungen hat, funktioniert ./manage.py nicht (noch).

Ich kann bewirken, dass es sich wie django-manage.py verhält, indem ich das ausführbare Flag explizit mit chmod +x manage.py setze. Danach sollten Sie die x -Flags sehen, wenn Sie ls -l im Verzeichnis eingeben, und Sie sollten die Datei ausführen können, ohne vorher python anzugeben.

Hinweis: Sie tun müssen immer noch ./manage.py nicht nur manage.py verwenden, diese Diskrepanz liegt vor, weil django-admin.py in /usr/local/bin/ lebt, die in enthalten ist PATH , während die Datei manage.py dies wahrscheinlich nicht tut. Daher geben wir explizit den Pfad in der Shell an, wobei sich . auf das aktuelle Verzeichnis bezieht.

    
wim 17.02.2014, 17:27
quelle
1

Sie können das Skript mit chmod +x script.py ausführbar machen, aber Sie benötigen die Shebang-Zeile, normalerweise #!/usr/bin/python
Wenn Sie ein Skript stark auf einer Unix-basierten Maching (Mac, Linux) verwenden, kann ein Alias ​​nützlich sein:
alias command="python path/to/script.py"

    
Awalrod 17.02.2014 17:28
quelle

Tags und Links