[python] subprocess.Popen a GTK

Juraj Michalek juraj.michalek na asinus.org
Čtvrtek Srpen 3 09:58:39 CEST 2006


Ahoj.

Mam jeden drobny problem a uz dlhsie sa mi ho nedari vyriesit.
Mam GUI aplikaciu, ktora robi klikaci frontend k programom, ktore spusta
"na pozadi".

Proces spusti nasledovne:
handle = subprocess.Popen(cmd,bufsize=16384,stdout=subprocess.PIPE)

Nasledne mam v GTK zaregistrovany timeout, ktoreho ulohou by malo byt
nacitanie informacii, ktore vykonavany proces dava na standardny vystup a
zobrazit ich v GUI.

Problem nastava u dlhsie beziacich procesov. Pokial zacnem pomocou read a
readline nacitavat data zo standardneho vystupu procesu. GUI vytuhne.
Dospel som k zaveru, ze problem je v readline, pretoze tato metoda caka,
kym dojde k naplneniu bufferu aspon jednym riadkom.

Tu je ukazka kodu, ktory je v timenout metode:

while gtk.events_pending():
    gtk.main_iteration()
line = self.handle.stdout.readline()
while line:
    while gtk.events_pending():
        gtk.main_iteration()
    print line
    line = self.handle.stdout.readline()

Akym sposobom mam nacitavat zo standardneho vystupu procesov, tak aby
metoda  nacitavania neblokovala aplikaciu? Pripadne, ako je mozne zistit
zaplenie bufferu?

Dakujem.


S pozdravom a prianim pekneho dna

   Juraj Michalek

-- 
Asinus IT group - https://www.asinus.org



Další informace o konferenci Python