speichert den Rückgabewert eines Python-Skripts in einem Bash-Skript
Möchte ich ausführen einer python-script aus einem bash-Skript, und ich möchten, speichern Sie die Ausgabe des python-Skript in eine variable.
In mein python-script, Druck ich ein paar Sachen auf dem Bildschirm und am Ende habe ich einen string zurückzugeben:
sys.exit(myString)
In meinem bash-Skript habe ich Folgendes:
outputString=`python myPythonScript arg1 arg2 arg3 `
Aber wenn ich dann auf überprüfen Sie den Wert der outputString
mit echo $outputString
ich bekommen alles, was das Python Skript gedruckt hatte, um Bildschirm, aber nicht der Rückgabewert myString
!
Wie sollte ich das tun?
EDIT: ich brauche den string, weil das mir sagt, wo eine Datei erstellt, indem Sie das Python-Skript befindet. Ich möchte etwas machen wie:
fileLocation=`python myPythonScript1 arg1 arg2 arg1`
python myPythonScript2 $fileLocation
InformationsquelleAutor der Frage Ricky Robinson | 2012-08-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
http://docs.python.org/library/sys.html#sys.exit
sys.exit
schreibenstderr
wenn Sie die Verwendung von string args.Etwas wie
Bash-script - speichern stderr in eine variable
Sie könnten etwas wie, dass in Ihrem Skript
Beispiel:
test.py
t.sh
bash t.sh
Bearbeiten
Nicht sicher, warum, aber in diesem Fall würde ich schreiben, ein Haupt-Skript und zwei andere Skripte... Mischen python und bash ist sinnlos, es sei denn, Sie wirklich brauchen, um.
InformationsquelleAutor der Antwort Loïc Faure-Lacroix
sys.exit()
sollte eine ganze Zahl sein, kein string:Den Wert
1
ist in$?
.Edit:
Wenn Sie möchten, schreiben nach stderr, verwenden Sie
sys.stderr
.InformationsquelleAutor der Antwort
Nicht verwenden
sys.exit
wie diese. Beim Aufruf mit einem string-argument der exit-code des Prozesses wird 1, Signalisierung eines Fehlers Zustand. Die Zeichenfolge gedruckt wird auf standard-Fehlermeldung, um anzugeben, was der Fehler sein könnte.sys.exit
nicht verwendet werden, um einen "return-Wert" für Ihr Skript.Stattdessen sollten Sie drucken Sie einfach die "return-Wert", um standard-Ausgabe mit ein
print
- Anweisung, dann rufen Siesys.exit(0)
, und erfassen Sie die Ausgabe in der shell.InformationsquelleAutor der Antwort chepner
Lesen Sie in der docs.
Wenn Sie etwas zurückkehren, sondern eine
int
oderNone
es wird gedruckt, umstderr
.Man nur stderr beim verwerfen stdout tun:
InformationsquelleAutor der Antwort Theodros Zelleke
Python-Dokumentation für sys.exit([arg])sagt:
Außerdem zum abrufen der Rückgabewert des letzten ausgeführten Programms könnten Sie die $? bash vordefinierte Variablen.
Jedenfalls, wenn man einen string als arg in sys.exit() sollte es gedruckt werden am Ende Ihres Programms die Ausgabe in einer separaten Zeile, so dass Sie können es abrufen, nur mit ein wenig analysieren. Als Beispiel betrachten Sie dieses:
InformationsquelleAutor der Antwort Giovanni Lombardo
Zusätzlich zu dem, was Tichodroma sagte, Sie könnten am Ende mit dieser syntax:
InformationsquelleAutor der Antwort Alp
Sie Ihre eigene Frage beantwortet. Wenn Sie möchten, führen Sie ein Python-Skript in bash und speichern Sie die Ausgabe in einer bash-variable, werden selektiv in was Sie Ihre Python-Skript druckt.
Machen ein "verbose" - flag, das kann man ausschalten in Ihre Python-Skript zu unterdrücken, um zusätzlichen text, den Sie nicht wollen, speichern Sie in Ihrem bash-variable. Beteiligen Sie sich nicht schriftlich gültigen Ausgabe zu
stderr
oder überschreiben von exit-codes! (das ist, was die schlechten Kinder tun...)Probieren Sie etwas wie dieses:
InformationsquelleAutor der Antwort cs01