Wie man Shebang-Flags repariert, die auf einigen Systemen nicht erkannt werden

8

Aus irgendeinem Grund wird das Flag -O (optimiert) in der Shebang-Zeile auf einem Red Hat Enterprise Server (Version 5.3), auf den ich zugreife, nicht erkannt. Auf anderen Systemen wird das Flag ohne Probleme erkannt.

Das Ausführen des folgenden Skripts unter OS X funktioniert einwandfrei. Die Erkennung des -O -Flags kann verifiziert werden, weil es (wenn nicht vorhanden) aktiviert oder deaktiviert (wenn angegeben), was unter der Bedingung if __debug__ steht:

%Vor%

Das Ausführen desselben Skripts im RHE-System führt zu:

  

/ usr / bin / env: python -O: Keine solche Datei   oder Verzeichnis

Ohne das Flag -O wird das Skript normal auf dem RHE-System ausgeführt (d. h. die integrierte Variable __debug__ wird auf True gesetzt).

Gibt es einen plattformübergreifenden Weg, um dieses Problem zu beheben? Gibt es sogar eine plattformspezifische Möglichkeit, das Problem von Flags in der Shebang-Zeile mit dem Python-Interpreter zu beheben?

Bearbeiten: Auch andere Problemumgehungen zum Setzen der __debug__ -Variable (ohne Verwendung von shebang-Flags) für Interpreter-weit wären ebenfalls interessant.

    
awesomo 20.04.2011, 19:29
quelle

7 Antworten

3

Wie wäre es mit einem kleinen Shell-Skript:

pythono :

%Vor%

Dann ändern Sie Ihr Skript zu verwenden:

%Vor%

Beachten Sie auch, dass das Festlegen der Umgebungsvariablen PYTHONOPTIMIZE auf eine nicht leere Zeichenfolge die gleiche ist wie die Verwendung des Flags -O . Von der man python man-Seite:

%Vor%     
unutbu 20.04.2011, 19:38
quelle
4

Einige Systeme erlauben nicht mehrere Argumente in einer #! -style Zeile. Der "env hack" ist auf keinen Fall ein offiziell empfohlener Weg, um das Pfadproblem zu lösen - der beste Weg, damit umzugehen, ist, die #! -Zeile der Installation so umschreiben zu lassen, dass sie auf /bin/python , /usr/bin/python , as verweist passend für das System.

Ссылка

    
Random832 20.04.2011 19:38
quelle
4

Um etwas zu erweitern, was unutbu sagte, haben Sie die Möglichkeit, PYTHONOPTIMIZE zur Laufzeit zu initialisieren. Dies funktioniert für alle modernen Shells:

%Vor%

Und der Vollständigkeit halber:

%Vor%     
jathanism 20.04.2011 19:53
quelle
1

Bitte versuchen Sie Folgendes:

%Vor%     
Ade YU 29.01.2012 07:13
quelle
0

Ändere den Shebang zu:

%Vor%

Dies setzt natürlich voraus, dass der Python-Interpreter als /usr/bin/python installiert ist; Ansonsten passen Sie sie nach Bedarf an.

Siehe auch diese Frage und meine Antwort darauf .

    
Keith Thompson 29.01.2012 07:22
quelle
-1

Wenn Sie #!/usr/bin/env weiterhin verwenden möchten, können Sie die Fakten nutzen, die

sind
  1. python hat Umgebungsvariablen für seine Befehlszeilenoptionen
  2. Mit env können Umgebungsvariablen vor dem Ausführen des Befehls
  3. festgelegt werden

Wenn Sie diese zusammenfügen, erhalten Sie die folgende Lösung:

#!/usr/bin/env PYTHONOPTIMIZE=1 python

Sie haben nach "plattformübergreifend" gefragt. Dies funktioniert nur für Unix (z. B. Linux, OS X usw.). Ich kann nicht für Windows sprechen. Ich würde erwarten, dass dies auch unter cygwin funktioniert, aber YMMV.

    
Mike McCartney 22.07.2014 16:32
quelle
-1

Mach einfach deinen Shebang ohne Flagge; Führen Sie die Umgebung dann erneut mit dem Flag aus, indem Sie sie an ein Heredoc übergeben.

%Vor%

Im Grunde haben Sie Ihre abschließende EOF am Ende der Datei.

    
jncc99 11.05.2016 23:38
quelle

Tags und Links