Hab hier ein "kleines" Problem dass meine Fähigkeiten etwas zu sehr ausreizt, oder vielleicht ist es auch die Geduld, wer weiß...
Mein Vorhaben:
Ich habe ein GUI mit wxPython erstellt. Das startet einen anderen Prozess (7zip). Während dieser Prozess läuft, soll das GUI eine Progressbar anzeigen. Die Progressbar soll anhand der Zeilen die der Prozess an stdout sendet gesteuert werden.
So weit so gut. GUI läuft, ProgressBar ist da.. naja, und dann ist gar nichts mehr gut.
Den Prozess starte ich mit subprocess und stdout sowie stderr landen in einer "pipe". Da aber dadurch erst alles in ein Fileobject geschrieben wird, und dann erst wieder verarbeitet werden kann, war das halt leider nichts mit der Progressbar. Wär ja auch zu schön gewesen.
Also hab ich mich versucht mit unserem allerbesten Freund Google "schlau" zu machen und bin beim gtk+ gelandet. Um genau zu sein, beim glib Modul. Oder um noch genauer zu sein, bei der Funktion glib.io_add_watch. Nachdem ich mich (letztendlich) erfolgreich mit der Installation von diesem "Zeug" rumgeschlagen hab, bin ich nun soweit:
Code: Alles auswählen
def callback(fd, con):
if con == glib.IO_IN:
print fd.read()
return True
else:
print 'ende'
return False
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, startupinfo=info)
glib.io_add_watch(p.stdout, glib.IO_IN, callback)
test = p.wait()
Was darf ich darunter verstehen?(python.exe:2196): GLib-WARNING **: g_io_channel_unix_new: 3 is neither a file d
escriptor or a socket.
(python.exe:2196): GLib-CRITICAL **: g_io_add_watch_full: assertion `channel !=
NULL' failed
(python.exe:2196): GLib-CRITICAL **: g_io_channel_unref: assertion `channel != N
ULL' failed
Ich habe mich inzwischen tot gesucht, hab aber nur lauter Zeug gefunden von dem ich nur die Hälfte verstehe (Ist mein erstes pythonprog mit gui, und mit Prozessen hatte ich bisher auch nur bedingt zu tun) oder es einfach nichts mit python zu tun hat.
Falls es wichtig ist, und ich glaube das ist es..: Mein System ist Win 7 Prof x64, Python x86 2.6.5, wxPython x86 2.8, pycairo 1.8.6, pygobject 2.14.2-2/2.20.0, pygtk 2.12.1-3, gtk+ bundle 2.16.6
Ich hoffe mir kann in diesem Fall geholfen werden, ansonsten werden sich meine Benutzer mit einer "Sanduhr" begnügen müssen
PS: Und bevor jemand fragt, zuerst wollte ich mich ins gtk+ einarbeiten, habs dann aber aufgrund der Kra.. äh, Installation sein gelassen und mich für wxPython entschieden.