popen2 blockiert

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.
dst
User
Beiträge: 27
Registriert: Mittwoch 28. Februar 2007, 23:42

popen2 blockiert

Beitragvon dst » Mittwoch 7. März 2007, 01:01

Moin,
ich möchte ein Shellprogramm starten, diesem einen String über die Standardeingabe übergeben und dessen Standardausgabe auslesen.

Da os.system() keinen Zugriff auf die Ausgabe des anderen Prozesses zu ermöglichen scheint, sondern nur den Return-Code zurückgibt, habe ich mich ein bisschen in der Dokumentation umgesehen und auf zu os.popen2() gekommen.

Sobald ich aber die Ausgabe des Prozesses lesen möchte, bleibt das Script stehen, auch wenn ich das ganze soweit wie möglich reduziere.

Code: Alles auswählen

       print "s popen"
       stdin, stdout = os.popen2(cmd)
       print "e popen"
       print "s write"
       stdin.write(self.tostring(False))
       print "e write"
       print "s iter"
       for line in stdout:
          print line
       print "e iter"


Gibt als letztes "s iter" aus.

Was mache ich verkehrt? :)
dst
User
Beiträge: 27
Registriert: Mittwoch 28. Februar 2007, 23:42

Beitragvon dst » Mittwoch 7. März 2007, 01:46

Okay, ich bin dann doch selbst drauf gekommen. Man sollte stdin schließen, wenn man mit dem Schreiben fertig ist.

stdin.close() wirkt wahre Wunder.
BlackJack

Beitragvon BlackJack » Mittwoch 7. März 2007, 16:41

Die ganzen `popen*`-Varianten werden mittlerweile auch vom `subprocess`-Modul abgedeckt.

Wer ist online?

Mitglieder in diesem Forum: Don Terremoto, SmombieTV