[Python-de] Re: popen deadlock

Carl Im carlim at gmx.de
Wed Aug 1 14:06:56 EDT 2001


Hallo noch mal...
So jetzt habe ich mich auch in die mailingliste eingetragen....
Danke erst mal für die Antworten, ich werde das Problem näher beschreiben: 

a,b,c = os.popen3(path)     #Martin: das Problem tritt auch bei
popen()auf....
while 1: 
lines = b.readline() 
out += lines 		# hier hängt es wohl irgendwo 
if not lines: break 
 ..... 
<path> ist ein UNIX oder DOS Script.

path ist ein z.b. eine .bat Datei: d:\user\im\prog\echo.bat  + parametern
echo.bat enthält ein paar kleine Scripte mit output den ich brauche...daran
hängt es auch nicht, sondern an einer .exe Datei die ich starte. 
Wenn man im Task-Manager nach sieht wird in echo.bat eine .exe1 datei
gestartet(ist ja auch so von mir gewolltJ) Leider startet die .exe1 noch andere
.exe2 Dateien (z.b. zur Lizenzkontrolle), darauf habe ich keinen Einfluss. Die
.bat  + die  .exe1 terminieren nur .exe2 läuft weiter im Hintergrund und mein
py-script hängt an obiger Stelle. Wenn ich .exe2 in Task-Manager kille läuft
auch mein py -script weiter. Fragt mich bitte nicht warum exe2 weiter
rumdümpelt, ist nicht mein code.  (Entschuldigt die umständliche Erklärung) 

Ich habe mir jetzt mit den win32 modulen
(createprocess...waitforsingelobject...etc) geholfen und warte darauf , dass der  cmd.exe-prozess  der meine
.bat datei ausführt terminiert, aber verstehen würde ich das ganze trotzdem
gerne. Wartet popen auf "child"-prozesse (kein unix feature ?) ?   
Vielen Dank für Anregungen und Hinweise
Ciao Carl 


> 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")




-- 
Aufgepasst - jetzt viele 1&1 New WebHosting Pakete ohne
Einrichtungsgebuehr + 1 Monat Grundgebuehrbefreiung!
http://puretec.de/index.html?ac=OM.PU.PU003K00736T0492a




More information about the Python-de mailing list