Seite 1 von 1

popen2 blockiert

Verfasst: Mittwoch 7. März 2007, 01:01
von dst
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? :)

Verfasst: Mittwoch 7. März 2007, 01:46
von dst
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.

Verfasst: Mittwoch 7. März 2007, 16:41
von BlackJack
Die ganzen `popen*`-Varianten werden mittlerweile auch vom `subprocess`-Modul abgedeckt.