[Python-de] os.popen2()

Diez B. Roggisch deets at web.de
Sam Nov 20 00:20:56 CET 2004


> > Da steht ausserdem, das man multithreading oder select einsetzer soll, um
> > mit dem Problem umzugehen. Ist schon ne Weile her, das ich selber mal was
> > mit select gemacht habe - aber das ist standard unix kram, schliesslich
> > ist piping dort üblich.
>
> Select ist nicht Unix-spezifisch, und was "Piping" ist, ist
> extremst Ansichtssache.

Mag sein das es das auch unter windows gibt - aber sed und mpage wohl kaum.  
Und seit wann ist piping Ansichtsache? Letztlich ist das nix als zwei 
Prozesse reden über einen (pro seite) filedescriptor - ob das jetzt für den 
einen stdin/out oder explizite sind ist egal, wie in dem parent process von 
popen. Die buffering-problematiken sind in jedem Fall dieselben. Ich denke 
mal, deshalb heisst's ja auch "p"open - p für pipe, weil das im Gegensatz zu 
anderen os-Funktionen genau diese Verkettung der stdout/in Deskriptoren 
erledigt.

>
> > Hat somit auch nicht direkt was mit python zu tun.
>
> Mir ging es nur darum klarzustellen, daß das, was ich
> gefragt hatte, nicht in der Dokumentation steht, wie die
> Anmache von Andreas unterstellt.

Ob du Andreas Spruch als Anmache interpretieren musst ist dir überlassen. 
Tatsache ist, das in der Doku steht:

"""
Applications which need to support a more general approach should integrate 
I/O over pipes with their select() loops, or use separate threads to read 
each of the individual files provided by whichever popen*() function or 
Popen* class was used. 
"""

Und das ist genau das - blocking IO löst man damit. Und genau das ist ja wohl 
dein Problem.

MfG Diez