[Python-de] popen deadlock

Martin v. Loewis martin at loewis.home.cs.tu-berlin.de
Wed Aug 1 10:11:47 EDT 2001


> Ich habe ab und zu das Problem , dass sich mein Programm aufgehängt
> wenn ich stdout eines Scriptes (Dos oder Unix) mit os.popen
> lese. Nach einigem Suchen im Netz und hunderten Einträgen zu diesem
> "Deadlock" Problem, sehe ich den Wald vor lauter Bäumen nicht mehr.

Mir ist das Problem noch nicht ganz klar. Welcher Deadlock? Du meinst,
irgendein Programm rechnet nicht weiter, obwohl es das sollte? Welches
dieser Programme?

> Das Problem taucht auf, wenn im Script ein Programm gestartet wird
> welches noch andere Prozesse im Hintergrund aufruft. Das eigentlich
> Programm und das Script terminieren.

Du sagst, das Skript terminiert. Weiter unten sagst Du, das Skript
hängt irgendwo. Was denn nun?

> a,b,c = os.popen3(path)
>             while 1:
>                     lines = b.readline()
>                     out += lines			# hier hängt es wohl irgendwo 
>                     if not lines: break

Ich kann mir vorstellen, dass es im readline hängt; es ist
unwahrscheinlich, dass das += nicht zu Ende kommt.

Wenn das readline nicht terminiert, liegt es wahrscheinlich daran,
dass der Prozess keine Ausgabe liefert. Das wiederum könnte daran
liegen, dass es eine Eingabe (auf a) erwartet, oder dass es eine
Fehlerausgabe (auf c) geschrieben hast, die Du nicht liest.

Wenn Du lediglich an der Ausgabe des Programms interessiert bist,
empfehle ich os.popen(path,"r")

Ciao,
Martin



More information about the Python-de mailing list