exit code 0 und exit message

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
bone2
User
Beiträge: 12
Registriert: Freitag 22. Juni 2012, 11:36

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.
deets

Stimmt nicht.

Code: Alles auswählen

$ python -c "import sys; sys.exit(-10)"
$ echo $?
246
Vielleicht ist die Java Subprocess-Maschinerie schuld?
BlackJack

@deets: Die Frage sollte wohl eigentlich lauten „mit etwas anderem als einer Zahl”, denn dann wird immer 1 zurück gegeben:

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
@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.
bone2
User
Beiträge: 12
Registriert: Freitag 22. Juni 2012, 11:36

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
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

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.
bone2
User
Beiträge: 12
Registriert: Freitag 22. Juni 2012, 11:36

naja wir habens :)

Code: Alles auswählen

sys.exit("absturz welt")
macht ein

Code: Alles auswählen

print("absturz welt")
raise SystemExit(1)
also printen wir jetzt einfach die benötigten daten und geben dann den code dazu
BlackJack

@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
User
Beiträge: 12
Registriert: Freitag 22. Juni 2012, 11:36

bone2 hat geschrieben:also printen wir jetzt einfach die benötigten daten und geben dann den code dazu
? mache ich doch, kam vlt nicht so rüber
BlackJack

@bone2: Ich hatte Deinen Text nicht gesehen bevor ich meinen abgeschickt hatte. Der war eine Weile in einem offenen Editor.
Antworten