Unter Linux erfordert Python möglicherweise die #!
(shebang) -Zeile. Dies hängt davon ab, wie mit den Python-Codes umgegangen wird. Entweder werden die Codes im interaktiven Python-Modus oder in einem Python-Skript ausgeführt.
Der interaktive Python-Modus ermöglicht es dem Benutzer, Python-Codes direkt einzugeben und auszuführen, ohne dass die Shebang-Linie erforderlich ist. Um den interaktiven Modus auszuführen, öffnen Sie ein Terminal und geben Sie python
für Python 2.X oder python3
Python 3.X ein.
$ python
Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
$ python3
Python 3.4.3 (default, Oct 14 2015, 20:33:09)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Mit dem Python-Skript kann der Benutzer die Python-Codes in einer Nur-Text-Datei schreiben und speichern und sie später ausführen. Dies kann die Shebang-Linie erfordern oder nicht. Es gibt jedoch zwei bekannte Gründe, warum die shebang-Zeile für die Verwendung von Python-Skripten unter Linux erforderlich ist.
Python-Codes in einem ausführbaren Skript auszuführen, dh zu definieren, wie die Codes ausgeführt werden sollen und mit welchem Interpreter;
Ausführen von Python-Codes in Bezug auf eine bestimmte Version von Python, dh Ausführen von Codes, die nur mit Python 2.X oder Python 3.X kompatibel sind
Übe mit Python-Skripten
Unten sind die Liste und der Inhalt der Dateien aufgeführt, mit denen ich Fälle gezeigt habe, in denen die #!
(shebang) -Zeile erforderlich oder nicht erforderlich ist.
$ ls -ln *.py
-rw-rw-r-- 1 1000 1000 94 Dec 14 18:37 hello1.py
-rwxrwxr-x 1 1000 1000 116 Dec 14 18:37 hello2e.py
-rw-rw-r-- 1 1000 1000 116 Dec 14 18:37 hello2.py
-rwxrwxr-x 1 1000 1000 117 Dec 14 18:37 hello3e.py
-rwxrwxr-x 1 1000 1000 120 Dec 14 18:37 hello3m.py
-rw-rw-r-- 1 1000 1000 117 Dec 14 18:37 hello3.py
$ file *.py
hello1.py: ASCII text
hello2e.py: Python script, ASCII text executable
hello2.py: Python script, ASCII text executable
hello3e.py: Python script, ASCII text executable
hello3m.py: Python script, UTF-8 Unicode (with BOM) text executable
hello3.py: Python script, ASCII text executable
hello1.py
enthält nur Quellcode.
import sys
sys.stdout.write("Hello from Python %s\n" % (sys.version,))
print("Hello, World!")
hello2.py
Enthält den Quellcode und die Shebang-Zeile.
#!/usr/bin/env python
import sys
sys.stdout.write("Hello from Python %s\n" % (sys.version,))
print("Hello, World!")
hello2e.py
enthält dasselbe wie hello2.py
und ausführbar gemacht.
hello3.py
Enthält dasselbe wie hello2.py
, mit der Ausnahme, dass es für die Ausführung mit Python 3 angepasst ist, indem die erste Zeile in umbenannt wird #!/usr/bin/env python3
.
hello3e.py
enthält dasselbe wie hello3.py
und ausführbar gemacht.
hello3m.py
enthält dasselbe wie hello3.py
und ausführbar gemacht, außer mit Write Unicode BOM
Option im Texteditor zB Mousepad gespeichert.
Darüber hinaus werden dem Benutzer zwei Methoden zum Ausführen der Python-Skripte vorgestellt. Beide Methoden wurden wie folgt demonstriert.
Methode 1: Führen Sie mit Python-Programm
Nachfolgend sind die Befehle und Ausgaben aufgeführt, die beim Ausführen des Quellcodes mit Python 2 und Python 3 ausgeführt werden.
$ python hello1.py
Hello from Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2]
Hello, World!
$ python3 hello1.py
Hello from Python 3.4.3 (default, Oct 14 2015, 20:33:09)
[GCC 4.8.4]
Hello, World!
Beide Versionen von Python konnten das Skript erfolgreich ausführen. Daher ist die shebang-Zeile nicht erforderlich, wenn das Python-Skript über python
oder mit dem python3
Befehl ausgeführt wird.
Methode 2: Als Python-Skript ausführen
Nachfolgend sind die Befehle und Ausgaben aufgeführt, die beim Ausführen des Quellcodes mit der shebang-Zeile ausgegeben werden. Diese sind weder für Python 2 noch für Python 3 geeignet, einschließlich nicht ausführbarer und ausführbarer Fälle.
$ ./hello1.py
bash: ./hello1.py: Permission denied
$ ./hello2.py
bash: ./hello2.py: Permission denied
$ ./hello3.py
bash: ./hello3.py: Permission denied
$ ./hello2e.py
Hello from Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2]
Hello, World!
$ ./hello3e.py
Hello from Python 3.4.3 (default, Oct 14 2015, 20:33:09)
[GCC 4.8.4]
Hello, World!
Die ersten drei Skripte sind fehlgeschlagen, da diese Skripte unabhängig von der shebang-Zeile nicht ausführbar sind (unterstützende Beweise siehe Zusätzliches Beispiel unten). Die letzten beiden Skripte haben eine "Shebang Line" und sind ausführbar.
Anscheinend ist ein Skript, das ausführbar gemacht wurde, ohne die shebang-Zeile im Wesentlichen nutzlos. Daher ist die shebang-Zeile erforderlich und das Skript muss ausführbar sein, wenn die Python-Codes in einem ausführbaren Skript ausgeführt werden.
Bei shebang klappt das nicht
In meinem vorbereiteten und getesteten Beispiel ist die Ausführung hello3m.py
als ausführbares Skript fehlgeschlagen und hat einen Fehler zurückgegeben.
$ ./hello3m.py
./hello3m.py: line 1: #!/usr/bin/env: No such file or directory
Dies ist eine bekannte Einschränkung, dass shebang nicht funktioniert oder ungültig wird. Wenn eine Datei als Unicode-Stückliste (Byte Order Mark) gespeichert wird, kann sie nicht normal als ausführbares Python-Skript ausgeführt werden.
Zusätzliches Beispiel
Dieses zusätzliche Beispiel gilt nur als Beleg. Der Benutzer sollte es vermeiden, dieses Beispiel auszuführen, obwohl das Ergebnis harmlos ist.
Ich habe eine andere Datei namens erstellt hello1e.py
, die dieselbe enthält hello1.py
und ausführbar gemacht hat. Das Ausführen dieses Skripts hat einen Syntaxfehler zurückgegeben.
$ ./hello1e.py
./hello1e.py: line 2: syntax error near unexpected token `"Hello from Python %s\n"'
./hello1e.py: line 2: `sys.stdout.write("Hello from Python %s\n" % (sys.version,))'
Wenn Sie dieses Skript ausführen, wird der Mauszeiger zunächst in ein Pluszeichen geändert und ändert nichts an der Darstellung. Der Syntaxfehler wird erst angezeigt, wenn ich auf den Desktop oder das Terminal-Fenster geklickt habe. Anschließend erstellt dieses Skript eine sys
Datei im selben Verzeichnis wie das Skript.
$ file sys
sys: PostScript document text conforming DSC level 3.0, Level 1
Die sys
Datei wurde als PostScript-Datei ohne Dateierweiterung identifiziert. Diese Datei kann im Document Viewer (zB Evince) geöffnet werden, und die Datei enthält tatsächlich einen Screenshot des Fensters, auf das ich zuvor geklickt habe. Nach meiner Erfahrung kann die Datei nur wenige Megabyte groß sein.
Auch hier ist die shebang-Zeile erforderlich und das Skript muss ausführbar sein, wenn das Python-Skript als ausführbares Skript ausgeführt wird. Andernfalls verhält sich das Skript wie oben beschrieben fehlerhaft.
Zusätzliche Bemerkungen
Der Begriff "ausführbar gemacht" oder "muss ausführbar sein" bezieht sich auf die Berechtigung zum Ausführen des Skripts. Dies erfolgt durch Ausführen des chmod +x FILENAME
Befehls in Terminal oder durch Aktivieren der Option "Diese Datei als Programm ausführen lassen" oder einer ähnlichen Option im Eigenschaftenfenster in einem Dateimanager.
Während andere existierende Antworten fast alles abgedeckt hatten, hat diese Antwort einen anderen Ansatz gewählt, indem praktische Beispiele zur Erläuterung der Angelegenheit verwendet wurden. Die Codesyntax wurde sorgfältig so geschrieben, dass die Beispiele unverändert mit Python 2 oder Python 3 ausgeführt werden können.
Die Python-Codes wurden von Using Python unter Windows und Using Python unter Unix-Plattformen mit zusätzlichem einzeiligen Code des allgegenwärtigen "Hello, World!" Programm.
Alle Codes und Befehle wurden vollständig getestet und funktionieren unter Xubuntu 14.04, auf dem standardmäßig Python 2.7 und Python 3.4 installiert sind.
.
) ab, um zu bestimmen, um welche Art von Datei es sich handelt. Auch Windows geht davon weg: Untersuchen Sie die ersten Zeilen der Microsoft Word-Datei, und es wird darauf hingewiesen, dass es sich tatsächlich um eine Microsoft Word-Datei handelt.