[Python-de] Pipes

Marcus Habermehl bmh1980de at yahoo.de
Sam Apr 9 10:16:07 CEST 2005


Georg Mischler schrieb:

>Marcus Habermehl wrote:
>
>> Wenn ein Button in meinem GUI angeklickt wird, soll sich ein Fenster mit
>> einem TextView öffnen, in dem man die Ausgabe eines gleichzeitig
>> gestarteten Befehls sehen kann.
>>
>> In etwa so, wie ich unten mal aufgeführt habe. 'find /usr -type l' ist
>> da nur ein Beispiel. Kann auch ein anderer Befehl sein. Bleibt aber
>> dennoch ein "externer" Befehl. Dazu kommt, dass die Ausgabe erst _nach_
>> Beendigung des Befehls eingefügt wird. Ich hätte es aber gerne
>> zeitgleich im TextView.
>
>Seit Python 2.4 gibt es das Standard-Modul "subprocess", welches
>genau solche Kommunikationsaufgaben erledigt. Funktioniert aber
>auch mit älteren Versionen. Google ist dein Freund.
>
Google ist in der Hinsicht nicht mein Freund. Auf subprocess bin ich 
auch schon durch Suchen gekommen.

Aber ehrlich gesagt bin ich wohl zu blöd dafür. Ich hab die Anwendung 
des Moduls überhaupt nicht verstanden. :(

Ich habe ausfuehren() mal so abgeändert:

def ausfuehren():
    while gtk.events_pending():
        gtk.main_iteration()
    for line in subprocess.Popen(['find', '/usr', '-type', 'l'], 
stdout=subprocess.PIPE).communicate():
        if line != '' and line != None:
            tbuffer1.insert_at_cursor(line)

Funktionieren tut das ja. Aber auch leider nicht mit der echtzeit 
Übertragung an den TextBuffer.

Eigentlich hatte ich mir das so überlegt, dass ich eine Pipe (irgendwie) 
erstelle, diese mit gobject.io_add_watch() überwache und die Änderungen 
dann auch (irgendwie) an den TextBuffer übertrage.

Allerdings scheint mein Verständnis da nicht ganz mitzuspielen, bzw. zu 
reichen. :(

Gruß
Marcus