Seite 1 von 1
Rückgabewert an Konsole
Verfasst: Donnerstag 27. März 2014, 16:11
von harald
Hi
Ich rufe auf einer Linux Shell heraus ein Python Program auf und würde gerne einen Rückgabewert an die Shell übergeben und mit diesen Weiterarbeiten. Leider wird in die Variable SRC_DIR_ nichts hineingeschrieben und wenn vermutlich der Rückgabewert von python3. Gibt es eine Möglichkeit den Rückgabewert OK in die Variable in der Shell zu schreiben? DANKE
Code: Alles auswählen
SRC_DIR_=`pwd`
SRC_DIR_= python3 main.py ${SRC_DIR_} ${BUILDDIR}
echo ${SRC_DIR_}
Code: Alles auswählen
def main():
if len(sys.argv) <= 2:
print("Error: Wrong number of parameters!!")
print("python3 main.py <sourceDirectory> <objectDirectory>")
return 0
print(sys.argv[1])
print(sys.argv[2])
return "OK"
Re: Rückgabewert an Konsole
Verfasst: Donnerstag 27. März 2014, 16:53
von BlackJack
@harald: Das ``return`` in der `main()`-Funktion hat keinen Effekt, das ist rein innerhalb vom Python-Prozess. Du kannst auf zwei Arten von Programmen aus etwas an die Shell zurück melden: Über den „return code”, das ist eine ganze Zahl die mit `sys.exit()` festgelegt werden kann und in der Shell in der Variablen $? landet, und in dem Du etwas im Programm ausgibst. Das kann man in der Shell dann mit den Backticks (`…`) wie Du das bei ``pwd`` gemacht hast oder IMHO besser mit der ``$(…)``-Syntax an einen Namen binden.
Was Du in der zweiten Zeile in dem Shell-Skript machst, ist wahrscheinlich so gar nicht das was Du denkst was das tut. Das bindet nämlich zuerst die Variable $SRC_DIR_ an eine leere Zeichenkette und führt *dann* das danach stehende aus. Nach dem ``=`` darf kein Leerzeichen stehen. Und wenn nur OK an den Namen gebunden werden soll, dann darf das Python-Programm auch nur OK ausgeben und nichts anderes.
Ob ein Programmablauf erfolgreich war, wird üblicherweise aber durch den „return code” angezeigt, wobei 0 per Konvention Erfolg und alle anderen Werte Misserfolg bedeuten.
Code: Alles auswählen
SRC_DIR=$(pwd)
OUTPUT=$(./main.py "$SRC_DIR" "$BUILD_DIR")
echo "$OUTPUT"
echo $?
Re: Rückgabewert an Konsole
Verfasst: Donnerstag 27. März 2014, 22:01
von Balmung
Kleine zusätzliche Anmerkung: die Shell Variable $? enthält immer den Rückgabewert des *letzten* ausgeführten Programms, d.h. in BlackJacks Beispiel wird es den Returncode des davorstehenden echo Befehls aus Zeile 3 enthalten.
Man könnte den Wert direkt nach Zeile 2 in eine andere Variable zwischenspeichern:
Code: Alles auswählen
OUTPUT=$(./main.py "$SRC_DIR" "$BUILD_DIR")
RETURN_CODE=$?
Re: Rückgabewert an Konsole
Verfasst: Donnerstag 27. März 2014, 22:49
von BlackJack
Re: Rückgabewert an Konsole
Verfasst: Donnerstag 27. März 2014, 23:04
von Leonidas
Balmung hat geschrieben:Kleine zusätzliche Anmerkung: die Shell Variable $? enthält immer den Rückgabewert des *letzten* ausgeführten Programms
Ich hatte gerade überlegt, ob das so ist, denn ``echo`` ist in der Regel kein Programm sondern ein Shell-Builtin. Fazit: ja, das gilt auch für nicht-Programme

Re: Rückgabewert an Konsole
Verfasst: Freitag 28. März 2014, 11:12
von snafu
@Leonidas: Das fände ich auch ziemlich unhandlich, wenn man ständig überlegen müsste, ob man es gerade mit einem Builtin der Shell oder mit einem "echten" Programm zu tun hat.
Re: Rückgabewert an Konsole
Verfasst: Freitag 28. März 2014, 11:58
von BlackJack
Zumal das ja auch von Shell zu Shell verschieden ist.