Wie man bash mit python mischt

7

Ich genieße es, Unix-Befehle sehr zu verwenden, aber ich kam zu dem Punkt, wo ich eingebettete Python-Teile nützlich finden würde. Das ist mein Code:

%Vor%

Allerdings wird nur "Hallo" gedruckt.

%Vor%

Wie kann ich das Bash-Skript ändern, um Python vollständig einzubetten? Und wäre es dann möglich Werte von Python-Variablen in Bash-Variablen zu übergeben? Vielen Dank.

    
Perlnika 05.03.2014, 16:59
quelle

3 Antworten

8

In der Zeile exec python ... haben Sie den Python-Interpreter% exec() , also ersetzt das PATH image das python image und es gibt absolut keine Hoffnung auf bash wird jemals ausgeführt. Wenn das ist, was Sie wollen, ist das in Ordnung, aber ansonsten, lassen Sie einfach die exec.

Die Shebang ("#!") Zeile im Python-Code ist völlig unnötig. Wenn Sie versuchen, eine gewöhnliche Datei auszuführen, sieht der Kernel das "#!", Führt alles aus, was ihm folgt ( echo "goodbye!" ) und gibt den Rest der Datei an die Standardeingabe der ausgeführten Datei weiter. Dies ist eine allgemeine Einrichtung zum Aufrufen von Interpretern. Da Sie den Python-Interpreter selbst aufrufen und den Kernel nicht darum bitten, wird dies weder benötigt noch nützlich.

Das /usr/bin/env python ist auch nicht notwendig, da der Python-Interpreter auf jeden Fall automatisch beendet wird, wenn er am Ende seiner Eingabe angelangt ist (at sys.exit(0) ). Dies bedeutet, dass auch END_OF_PYTHON nicht benötigt wird.

Zusammenfassend möchte ich folgendes schreiben, um zu erreichen, was Sie scheinbar erreichen wollen:

%Vor%     
Emmet 05.03.2014, 17:14
quelle
9

Verwenden Sie nicht exec . Dadurch wird der Shell-Prozess durch das Programm ersetzt, das Sie ausführen, sodass der Rest des Skripts nicht ausgeführt wird.

%Vor%     
Barmar 05.03.2014 17:03
quelle
5

Verwenden Sie nicht exec python , sondern nur python .

Das exec weist die Shell an, sich mit dem Python-Interpreter selbst zu ersetzen , damit sie nach diesem Punkt nicht mehr ausgeführt wird.

    
Charles Duffy 05.03.2014 17:02
quelle

Tags und Links