Ich habe dies in einigen Skriptsprachen bemerkt, aber in diesem Beispiel verwende ich Python. In vielen Tutorials würden sie #!/usr/bin/python3
in der ersten Zeile beginnen. Ich verstehe nicht, warum wir das haben.
- Sollte das Betriebssystem nicht wissen, dass es sich um ein Python-Skript handelt (offensichtlich ist es installiert, da Sie darauf verweisen)?
- Was ist, wenn der Benutzer ein Betriebssystem verwendet, das nicht auf Unix basiert?
- Die Sprache wird aus irgendeinem Grund in einem anderen Ordner installiert
- Der Benutzer hat eine andere Version. Besonders wenn es keine Vollversionsnummer ist (wie Python3 vs Python32)
Wenn überhaupt, konnte ich sehen, dass dies das Python-Skript aus den oben aufgeführten Gründen brach.
Antworten:
#!/usr/bin/python3
ist eine Shebang-Linie .Eine Shebang-Linie definiert, wo sich der Interpreter befindet. In diesem Fall befindet sich der
python3
Interpreter in/usr/bin/python3
. Eine shebang Linie könnte auch ein seinbash
,ruby
,perl
oder jede andere Skriptsprachen Dolmetscher, zum Beispiel:#!/bin/bash
.Ohne die Shebang-Zeile weiß das Betriebssystem nicht, dass es sich um ein Python-Skript handelt, selbst wenn Sie das Ausführungsflag für das Skript setzen und es wie folgt ausführen
./script.py
. Um das Skript standardmäßig in Python3 auszuführen, rufen Sie es entweder als aufpython3 script.py
oder legen Sie die Shebang-Zeile fest.Sie können die
#!/usr/bin/env python3
Portabilität zwischen verschiedenen Systemen verwenden, falls der Sprachinterpreter an verschiedenen Standorten installiert ist.quelle
#! /usr/bin/env python3
sollte über gewählt werden#! /usr/bin/python3
?Das nennt man einen Hash-Bang. Wenn Sie das Skript über die Shell ausführen, wird die erste Zeile überprüft, um herauszufinden, welches Programm zur Interpretation des Skripts gestartet werden sollte.
Ein nicht auf Unix basierendes Betriebssystem verwendet seine eigenen Regeln, um herauszufinden, wie das Skript ausgeführt wird. Windows verwendet beispielsweise die Dateinamenerweiterung und
#
bewirkt, dass die erste Zeile als Kommentar behandelt wird.Wenn der Pfad zur ausführbaren Python-Datei falsch ist, schlägt das Skript natürlich fehl. Es ist einfach, Links zur tatsächlichen ausführbaren Datei von jedem Ort aus zu erstellen, der in der Standardkonvention angegeben ist.
quelle
Diese Zeile hilft bei der Suche nach der ausführbaren Programmdatei, mit der das Skript ausgeführt wird. Diese Shebang-Notation ist in den meisten Skriptsprachen ziemlich Standard (zumindest wie sie auf erwachsenen Betriebssystemen verwendet wird).
Ein wichtiger Aspekt dieser Zeile ist die Angabe, welcher Interpreter verwendet wird. Bei vielen entwicklungsorientierten Linux-Distributionen ist es beispielsweise normal, dass mehrere Python-Versionen gleichzeitig installiert sind.
Python 2.x und Python 3 sind nicht 100% kompatibel, daher kann dieser Unterschied sehr wichtig sein. Also
#! /usr/bin/python
und#! /usr/bin/python3
sind nicht die gleichen (und auch nicht ganz die gleichen#! /usr/bin/env python3
wie an anderer Stelle auf dieser Seite angegeben.quelle
Und diese Linie ist wie .
Es wird ignoriert.
Es kann nicht ausgeführt werden und sollte so geändert werden, dass es auf den richtigen Speicherort verweist. Oder
env
sollte verwendet werden.Es kann nicht ausgeführt werden und wird wahrscheinlich trotzdem nicht unter einer anderen Version ausgeführt.
quelle
Um zu verdeutlichen, wie die Shebang-Zeile für Windows funktioniert, lesen Sie das 3.7 Python-Dokument :
quelle
Tatsächlich ist die Bestimmung des Dateityps einer Datei sehr kompliziert, sodass das Betriebssystem dies jetzt nicht nur wissen kann. Es kann viele Vermutungen anstellen, basierend auf -
Aber die Kommandozeile kümmert sich nicht darum, weil sie auf einer begrenzten abwärtskompatiblen Ebene läuft, ab wann dieser ausgefallene Unsinn nichts mehr bedeutete. Wenn Sie sicher darauf doppelklicken, kann ein modernes Betriebssystem dies herausfinden. Wenn Sie es jedoch von einem Terminal aus ausführen, ist dies nicht der Fall, da sich das Terminal nicht um Ihre ausgefallenen betriebssystemspezifischen APIs zur Dateitypisierung kümmert.
In Bezug auf die anderen Punkte. Es ist eine Annehmlichkeit, es ist ähnlich möglich zu laufen
python3 path/to/your/script
Wenn sich Ihre Python nicht im angegebenen Pfad befindet, funktioniert sie nicht, aber wir neigen dazu, Dinge zu installieren, damit solche Dinge funktionieren, und nicht umgekehrt. Es spielt eigentlich keine Rolle, ob Sie unter * nix sind, es liegt an Ihrer Shell, ob Sie diese Zeile in Betracht ziehen, weil es eine ist
shellcode
. So können Sie beispielsweisebash
unter Windows ausführen .Sie können diese Zeile tatsächlich ganz weglassen. Dies bedeutet lediglich, dass der Anrufer einen Interpreter angeben muss. Stellen Sie Ihre Dolmetscher auch nicht an nicht standardmäßigen Orten auf und versuchen Sie dann, Skripte ohne Angabe eines Dolmetschers aufzurufen.
quelle