Hallo zusammen,
ich habe ein Skript geschrieben bei dem ich os.popen nutze um wiederrum ein anderes Skript aufzurufen. Hoert sich nach ziemlicher frickelei an... und das ist es auch.
Nichts destotrotz ist mir aufgefallen, dass wenn ich mit popen ein korruptes Statement absetze, dass mein Skript trotzdem durchlaeuft und keinen Fehler wirft. Auch mit Try... Except und sys.exc_info() wurde mir kein Fehler ausgegeben.
Wie komme ich an den Fehlercode bzw. an die Rueckgabe der Shell?
VG
bankkind
komischer Effekt bei os.popen
Hallo!
Allgemein wird empfohlen, satt os.popen() subprocess.Popen() zu verwenden. Auf dieser Seite findest du mehr dazu: http://docs.python.org/library/subprocess.html
Ganz unten findet sich auch ein hilfreiches Beispiel:
Du kannst nun mit p.stderr.read() die ausgegebenen Fehler lesen. Mit p.stdout.read() kommst du an die normale Rückgabe.
Wenn du nur den Rückgabewert eines aufgerufenen Programmes brauchst, reicht manchmal schon subprocess.call().
Schöne Grüße,
brb
Allgemein wird empfohlen, satt os.popen() subprocess.Popen() zu verwenden. Auf dieser Seite findest du mehr dazu: http://docs.python.org/library/subprocess.html
Ganz unten findet sich auch ein hilfreiches Beispiel:
Code: Alles auswählen
p = Popen("cmd", shell=True, bufsize=bufsize,
stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
(child_stdin,
child_stdout,
child_stderr) = (p.stdin, p.stdout, p.stderr)
Wenn du nur den Rückgabewert eines aufgerufenen Programmes brauchst, reicht manchmal schon subprocess.call().
Schöne Grüße,
brb
wenn deinem Prgramm "inputs" geben willst, kannst du Popen.communicate() verwenden (Rückgabe erst wenn der Prozess beendet ist) oder stdin.write() kombiniert mit stdout.readlines()
the more they change the more they stay the same
-
- User
- Beiträge: 106
- Registriert: Freitag 14. September 2007, 23:02
- Wohnort: Teltow
- Kontaktdaten:
ok, ich habe mir schon gedacht dass ihr mich zu subprocess ueberreden wollt. Aber gibt es auch eine Moeglichkeit os.popen zu verwenden?
ich muesste ne ziemliche menge umschreiben um subprocess zu integrieren.
ich muesste ne ziemliche menge umschreiben um subprocess zu integrieren.
@bankkind: Dann schreibe es um.
@dav1d: Wenn man nicht ".communicate()", sondern direkt ".stdout" und ".stdin" verwendet, muss man das sehr sorgfältig tun, da man so schnell ein Deadlock produzieren kann, wenn der Puffer der Pipe voll läuft.
@dav1d: Wenn man nicht ".communicate()", sondern direkt ".stdout" und ".stdin" verwendet, muss man das sehr sorgfältig tun, da man so schnell ein Deadlock produzieren kann, wenn der Puffer der Pipe voll läuft.
the more they change the more they stay the same
@lunar, ich will damit sagen, dass es manchmal ein Muss ist, direkt von stdout zu lesen und in stdin zu schreiben, um meinen vorherigen Beitrag zu "rechtfertigen"
the more they change the more they stay the same