[Python-de] Re: popen deadlock

Carl Im carlim at gmx.de
Wed Aug 15 14:38:22 EDT 2001


Hallo zusammen, 
ich kriege das immer noch nicht in den Griff (auf win32). Rene hat mir
geschrieben, dass eine pipe (verbunden mit stdout) solange offen bleibt, wie der
Filedescriptor benutzt wird. Leider kann ich den Start eines Child-Processes,
innerhalb meines scriptes dessen stdout ich brauche,  nicht  verhindern.
Dieser Prozess terminiert nicht von alleine und blockiert stdout . Wie kann man
diese ganze stdout/stderr Geschichte in einem Thread oder sonst wie
realisieren, damit man die Kontrolle behält, auch wenn eine pipe blockiert ist. 
Hat jemand einen Tipp für mich
Danke schon mal...
Ciao Carl. 

 
Carl Im wrote:
> > 
> > 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 weiss ja nicht ob es hilft, aber das hoert sich wie ein
> Problem an das ich mal mit einem CGI-Script hatte.
> (Das startete ein anderes Programm im Hintergrund und der
> Webserver wurde dann nie fertig. unter UNIX)
> 
> Das Problem scheint folgendes zu sein, die Pipe bleibt
> solange offen wie die Filedescriptoren noch benutzt werden.
> Unter Unix werden diese aber an Child-Programme weitergegeben.
> Wenn diese im Hintergrund weiterlaufen, bleibt der Filedescriptor
> benutzt und die Pipe offen.
> Geholfen hat damals den Hintergrundprozess mit 
> "xxx </dev/null >/dev/null" zu starten, und somit von den
> urspruenglichen Filedescriptoren zu trennen.
> 
> Ich weiss zwar nicht, ob das weiterhilft, aber man kann es ja mal
> versuchen.
> 
> MfG
> Rene Liebscher
> 

-- 
GMX - Die Kommunikationsplattform im Internet.
http://www.gmx.net





More information about the Python-de mailing list