Seite 1 von 1
Rückgabewert an die aufrufende shell
Verfasst: Mittwoch 24. Januar 2007, 22:23
von Smokie_joe
Ich suche nach einer möglichkeit Rückgabewerte an die shell zu liefern ist
die einzige möglichkeit? Und so Richtig?
Denn es scheint so nicht zu Funktionieren.
mfg
Smokie
Verfasst: Mittwoch 24. Januar 2007, 22:29
von Bernhard
Ich weiß nicht, was bei Dir nicht funktioniert. Hast Du versucht, eine Zahl zwischen 0 und 127 zurückzugeben oder etwas anderes?
http://www.python.org/doc/2.3.5/lib/module-sys.html schreibt:
> Most systems require it to be in the range 0-127, and produce undefined results otherwise
>...
> If another type of object is passed, None is equivalent to passing zero,
> and any other object is printed to sys.stderr and results in an exit code of 1.
Wenn Du also fälschlich immer den Exit Code 1 erhälst, könnte das daran liegen.
Gruß,
Bernhard
Verfasst: Mittwoch 24. Januar 2007, 22:47
von Smokie_joe
Super Danke funktioniert jetzt

*freu*
Allerdings hätte ich noch die frage ob es möglich ist
irgendwo im skritp Rückgabewerte zu liefern (ohne zu Beenden)?
Und evtl. nicht nur Ganzzahlen zwischen 0 und 127.
mfg
Smokie
Nein, das geht nicht
Verfasst: Donnerstag 25. Januar 2007, 12:39
von sunmountain
Schlicht und ergreifend.
ist das Ende.
Sollte es für Dich nötig sein, einen Prozess zu überwachen,
solltest Du Dich mit IPC (Pipes,Sockets,FIFO's) etc. auseinandersetzen.
Verfasst: Donnerstag 25. Januar 2007, 14:18
von Leonidas
Smokie_joe hat geschrieben:Allerdings hätte ich noch die frage ob es möglich ist
irgendwo im skritp Rückgabewerte zu liefern (ohne zu Beenden)?
Wie soll das gehen? Ein Rückgabewert wird zurückgegeben wenn das Programm sich beendet, so ist dieser Wert definiert. Die Einzige ausnahme, sind Deamons, die beim Starten sich Forken und ein Fork sind beendet und der andere weiterläuft, der Beendende Fork gibt dabei den Rückgabewert aus.
Verfasst: Donnerstag 25. Januar 2007, 23:02
von Smokie_joe
okay
Vielen dank für eure Antworten
mfg
Smokie
Verfasst: Freitag 26. Januar 2007, 08:25
von jens
Smokie_joe hat geschrieben:irgendwo im skritp Rückgabewerte zu liefern (ohne zu Beenden)?
Warum gibst du die Daten nicht einfach mit print bzw. sys.stdout aus?
Verfasst: Freitag 26. Januar 2007, 08:37
von sape
jens hat geschrieben:
Warum gibst du die Daten nicht einfach mit print bzw. sys.stdout aus?
Stimmt, mit ``subprocess`` und ein par "hacks" kann man dann den Output "Synchron"
(Also ohne erst darauf zu warten dass das Programm beendet ist. Sondern während der Laufzeit den bisherigen puffer zu ``flush``en) auffangen. Aber wie realisiert man das wirklich? Versuche dahingehend habe bei mir nicht funktioniert
(€: Der puffer wird immer erst ausgegeben wenn das Programm terminiert wurde.). Es soll aber irgendwie gehen.
lg
Verfasst: Freitag 26. Januar 2007, 08:39
von jens
Sowas hat Gerold hier mal gezeigt...
Verfasst: Freitag 26. Januar 2007, 21:24
von sape
jens hat geschrieben:Sowas hat Gerold hier mal gezeigt...
Hast du den Link oder ein passendes Suchwort?
Verfasst: Freitag 26. Januar 2007, 22:00
von gerold
sape hat geschrieben:jens hat geschrieben:Sowas hat Gerold hier mal gezeigt...
Hast du den Link oder ein passendes Suchwort?
Hi!
http://www.python-forum.de/topic-4941.html
Funktioniert so aber nur zwischen Python-Programmen. Wenn andere Programmiersprachen mitspielen, sollte man ein anderes Datenaustauschformat verwenden.
lg
Gerold

Verfasst: Freitag 26. Januar 2007, 23:08
von gerold
gerold hat geschrieben:Wenn andere Programmiersprachen mitspielen, sollte man ein anderes Datenaustauschformat verwenden.
Z.B. INI:
server.py:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import os
import sys
from ConfigParser import ConfigParser
from StringIO import StringIO
def main():
while True:
stdin_string = sys.stdin.read()
if not stdin_string:
break
inistream = StringIO(stdin_string)
ini = ConfigParser()
ini.readfp(inistream, "inistream")
print
print "Ausgabe des Servers:"
print "********************"
for key, value in ini.items("values"):
print key, value
print "********************"
if __name__ == "__main__":
main()
client.py:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import os
import sys
import time
import subprocess
from ConfigParser import ConfigParser
from StringIO import StringIO
EOF = "\x1a" # End of File
def generate_ini_string(valuedict):
"""INI-String erstellen"""
ini = ConfigParser()
ini.add_section("values")
for key, value in valuedict.items():
ini.set("values", str(key), value)
stream = StringIO()
ini.write(stream)
return stream.getvalue()
# Serverprozess starten
proc = subprocess.Popen(
(sys.executable, "server.py"),
stdin = subprocess.PIPE,
cwd = os.curdir
)
for i in range(2):
# INI-String zum Server schicken
valuedict = {"value1": i + 1, "value2": i + 2}
proc.stdin.write(generate_ini_string(valuedict) + "\x1a")
# warten
time.sleep(3)
# Prozess schließen
proc.stdin.close()
mfg
Gerold

Verfasst: Samstag 27. Januar 2007, 17:44
von sape
Hi, Gerold. Danke für die Beispiele, aber das funktioniert nicht so wie ich mir das denke. Das es hier nun OT ist habe ich einen neune Thread aufgemacht.
Hier gehts weiter:
http://www.python-forum.de/viewtopic.php?p=56774#56774
lg