Ich habe ein Bash-Skript, a.sh, und darin habe ich ein Python-Skript b.py aufgerufen. Das Python-Skript berechnet etwas, und ich möchte, dass es einen Wert zurückgibt, der später in a.sh verwendet wird. Ich weiß, ich kann
tunIn a.sh:
%Vor%In b.py:
%Vor%Aber das ist nicht so praktisch, weil ich auch andere Nachrichten in b.py
druckeGibt es einen besseren Weg?
Bearbeiten:
Was ich gerade mache ist nur
%Vor%Es bedeutet, dass ich viele Dinge innerhalb von b.py ausdrucken kann, aber nur die letzte Zeile (der letzte Druckbefehl, vorausgesetzt, sie enthält nicht \ n ") wird in var.
gespeichertDanke für alle Antworten!
Ich würde es in eine Datei drucken, die in der Befehlszeile ausgewählt wurde, dann würde ich diesen Wert in bash mit etwas wie cat
bekommen.
Also würden Sie gehen:
%Vor%[EDIT, eine andere Idee, die auf anderen Antworten basiert]
Ihre andere Möglichkeit besteht darin, Ihre Ausgabe sorgfältig zu formatieren, damit Sie bash-Funktionen wie head
/ tail
verwenden können, um nur die ersten / letzten Zeilen in Ihr nächstes Programm zu leiten.
Leiten Sie in Ihrem Python-Skript weitere Nachrichten an stderr um und drucken Sie x
auf stdout:
im Bash-Skript:
%Vor%Auch wenn x eine Ganzzahl zwischen 0,255 ist, können Sie exit-Code verwenden, um es an die Bash zu übergeben:
%Vor%in bash:
%Vor%Bitte beachten Sie, dass Exit-Code verwendet wird, um Fehler anzuzeigen, 0 bedeutet kein Fehler, und dies bricht die Konvention.
Sie können die Ausgabe in eine temporäre Datei schreiben und die Shell diese Datei lesen und löschen lassen. Dies ist noch weniger bequem, aber reserviert stdout für die Kommunikation mit dem Benutzer.
Alternativ können Sie eine Art von Format für stdout verwenden: Die ersten n Zeilen sind bestimmte Variablen, der Rest wird von der übergeordneten Shell an den Benutzer zurückgegeben. Auch nicht praktisch, aber vermeidet die Verwendung von Templateien.