2016-03-08 9 views

Antwort

7

Da, was Sie mit python script.py ausführen, ist das Python-Programm; Anschließend lädt und führt es das Skript aus, das Sie in den Parametern script.py (im Grunde eine Textdatei) angegeben haben. Die Skriptdatei muss keine ausführbare Datei sein, denn was hier ausgeführt wird, ist der Python-Interpreter (die Python-Binärdatei selbst, die offensichtlich die Berechtigung x haben sollte).

Mit .\script.py versuchen Sie, Ihr Skript (immer noch dieselbe Textdatei) direkt als Programm auszuführen. Wenn Sie das tun, möchten Sie, dass es mit dem Interpreter analysiert wird, den Sie in der ersten Zeile Ihres Skript-Codes angegeben haben, dem "Shebang", z. #!/usr/bin/env python. Wenn es nicht mit der x Berechtigung gesetzt ist, versucht das Betriebssystem nicht, Ihre Datei "auszuführen" (obwohl es versuchen könnte, es mit dem Standardprogramm zu öffnen, wo anwendbar), so dass es sich nicht um den Shebang kümmert.

+1

Um zu erfahren, mehr darüber, wie das funktioniert, suchen Sie nach Unix Shebangs https://en.wikipedia.org/wiki/Shebang_%28Unix%29 – xvan

4

Die Datei selbst interpretiert (lesen) anstatt tatsächlich in Ihrem ersten Beispiel ausgeführt zu werden. Die Python-Anwendung benötigt Ausführungsrechte.

Im zweiten Beispiel wird die Datei selbst ausgeführt, benötigt also diese Rechte, um fortzufahren.

2

Wenn wir ein Skript wie python script.py ausführen, rufen wir tatsächlich den Python-Interpreter auf, der im Allgemeinen bei /usr/bin/python liegt (Die Ausgabe von which python wird Ihnen sagen, wo genau).

Der Interpreter liest seinerseits die Skripte und führt seinen Code aus. Es ist der Interpreter, der die Ausführungsberechtigung hat.

Wenn ein Skript als ./script.py ausgeführt wird, wird das Skript direkt ausgeführt und das Skript erfordert Ausführungsberechtigung. Der verwendete Interpreter wird in der Shebang-Zeile angegeben.

Wenn der Kernel feststellt, dass die ersten beiden Bytes #! sind, verwendet er den Rest der Zeile als Interpreter und übergibt die Datei als Argument. Beachten Sie, dass die Datei dafür ausführbar sein muss. Im ersteren Fall werden wir indirekt zu tun, was der Kern zu tun hatte würden wir das Skript als ./script.py

Kurz für die Ausführung von method1 der Dolmetscher lesen muss nur die Erlaubnis ausgeführt, sondern für später muss er es ausführen direkt