wenn ich mit sys.exit(args...) irgendwas anderem als 0 aufrufe, ist der exit code von python immer 1. ist es nicht möglich, eine exit code 0 zu erzeugen und gleichzeitig eine nachricht an das aufrufende programm zu übergeben?
das python programm wird aus java aufgerufen.
exit code 0 und exit message
Stimmt nicht.
Vielleicht ist die Java Subprocess-Maschinerie schuld?
Code: Alles auswählen
$ python -c "import sys; sys.exit(-10)"
$ echo $?
246
@deets: Die Frage sollte wohl eigentlich lauten „mit etwas anderem als einer Zahl”, denn dann wird immer 1 zurück gegeben:
@bone2: Die Lösung ist nicht so faul sein und den Text selbst ausgeben und dann `sys.exit()` mit der gewünschten Zahl aufrufen, oder das Programm einfach ans Ende kommen lassen wenn 0 gewünscht ist.
Code: Alles auswählen
bj@s8n:~$ python -c 'import sys; sys.exit("spam")'; echo $?
spam
1
bj@s8n:~$ python -c 'import sys; sys.exit("parrot")'; echo $?
parrot
1
jain. also ja, imemr wenn da nen string drin steht, ist es 1, wenn man ne zahl mitgibt wird die durchgereicht.
nein, das hat nix mit faulheit zu tun, sondern eher mit der tatsache wie der javacode bereits existiert und mit nem anderen process arbeitet, der ersetzt werden soll
nein, das hat nix mit faulheit zu tun, sondern eher mit der tatsache wie der javacode bereits existiert und mit nem anderen process arbeitet, der ersetzt werden soll
Du kannst doch nicht über den Exitcode eines Prozesses einen String "verschicken", das ist meines Wissens nach ein unsigned 8bit Integer unter Unix und wird vom OS gestellt.
Was ginge, wäre entweder die Exitcodes zu mappen (d.h. Dein Elternprozess kennt die Bedeutung des Codes) oder den Kindprozess auf STDERR schreiben zu lassen und bei !=0 die Ausgabe auszulesen. Letzteres ist mit deutlich größerem Aufwand verbunden, ersteres durch max 256 Codes limitiert.
Was ginge, wäre entweder die Exitcodes zu mappen (d.h. Dein Elternprozess kennt die Bedeutung des Codes) oder den Kindprozess auf STDERR schreiben zu lassen und bei !=0 die Ausgabe auszulesen. Letzteres ist mit deutlich größerem Aufwand verbunden, ersteres durch max 256 Codes limitiert.
naja wir habens
macht ein
also printen wir jetzt einfach die benötigten daten und geben dann den code dazu
Code: Alles auswählen
sys.exit("absturz welt")
Code: Alles auswählen
print("absturz welt")
raise SystemExit(1)
@bone2: *Du* musst einfach nur Deinen Text auf der Standardfehlerausgabe ausgeben und *danach* `sys.exit()` aufrufen, entweder ohne Argumente oder explizit mit 0. Es geht halt nicht beides nur in einem `sys.exit()`-Aufruf.
@bone2: Ich hatte Deinen Text nicht gesehen bevor ich meinen abgeschickt hatte. Der war eine Weile in einem offenen Editor.