Prozessausgabe durchgehend weiterleiten

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Desöfteren liest man, dass die Ausgabe von Unterprozessen sozusagen "live" mitgeschnitten werden soll. Eine mögliche Lösung wäre die hier.

Code: Alles auswählen

>>> def handler(data): print '*** OUTPUT *** \n {0} \n'.format(data)
... 
>>> args = ['wget', 'http://www.python-forum.org/', '--delete-after']
>>> redirect_process_output(args, handler)
*** OUTPUT *** 
 --2009-10-17 01:20:48--  http://www.python-forum.org/
Auflösen des Hostnamen »www.python-forum.org«....  

*** OUTPUT *** 
 64.157.176.237
Verbindungsaufbau zu www.python-forum.org|64.157.176.237|:80...  

*** OUTPUT *** 
 verbunden.
HTTP Anforderung gesendet, warte auf Antwort...  

*** OUTPUT *** 
 200 OK
Länge: nicht spezifiziert [text/html]
In »index.html« speichern.

    [<=>                                    ] 0           --.-K/s               

*** OUTPUT *** 
    [ <=>                                   ] 5.160       --.-K/s   in 0,03s   

2009-10-17 01:20:48 (159 KB/s) - »index.html« gespeichert [5160]

Entferne »index.html«.
lunar

Hat es einen besonderen Grund, warum Du nicht "select" verwendest? Das würde dann nämlich auf jedem Unix funktionieren.

Außerdem darfst Du meinem Verständnis der Dokumentation nach epoll nur im Vaterprozess aufrufen (also "pid != 0"). Der Kindprozess erhält gar kein gültigen Filedeskriptor durch den "pty.fork()"-Aufruf. "epoll.register" müsste im Kind daher direkt fehlschlagen. Das fällt wahrscheinlich nur nicht auf, weil Du die Ausnahme abfängst.

Zudem wäre es möglich, dass "epoll()"-Systemaufrufe durch Signalhandler unterbrochen werden können. In diesem Fall müsstest Du noch auf "errno.EINTR" prüfen, und in diesem Fall einfach fortfahren. Da müsstest Du mal Dokumentation lesen.

Zum Stil: Die magische Konstante finde ich unschön. Ein errno-Import bringt Dich schon nicht um ;)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Aus BUFSIZE würde ich auch gleich noch einen Parameter machen.
Das Leben ist wie ein Tennisball.
Antworten