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

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

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

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