Seite 1 von 1

"Fake-Terminal"

Verfasst: Montag 27. März 2006, 14:22
von beewee
Hi,

ich hab schon hier im Forum gesucht und auch gefunden, aber so richtig will es bei mir nicht funktionieren.
Ich bräuchte etwas, wie ein Bash-Terminal, in dem ich Befehle ausführen kann und ihren output anzeigen kann.
Ich habe es schon mit

Code: Alles auswählen

abc = commands.getstatusoutput("apt-get update")
print abc
probiert, aber das gibt mir den output erst aus, wenn der Befehl apt-get update ganz durchgelaufen ist (apt-get update gibt ja tröpfchenweise was aus). Ich bräuchte es aber, dass der output während der Befehl ausgeführt wird ausgegeben (in ein wxpython-Textfeld geschrieben) wird, so wie in einem normalen Terminal.

Danke für eure Hilfe,

BeeWee[/code]

Verfasst: Montag 27. März 2006, 14:25
von modelnine
Zumindest das sammeln der Ausgabe geht relativ einfach:

Code: Alles auswählen

from subprocess import Popen, PIPE, STDOUT

proc = Popen(("/usr/sbin/apt-get","update"),stdin=PIPE,stdout=PIPE,stderr=STDOUT)
proc.stdin.close()
print "Return code:", proc.wait()
print "Ausgabe:", proc.stdout.read()
Um das ganze in ein wxPython-Fenster zu kriegen mußt Du tröpfchenweise von proc.stdout lesen (das ist ein ganz normales File-like-Objekt, also auch select-bar), und es entsprechend in ein wxPython-Textfenster einfügen.

Das geht; und es gibt auch in der wxPython-Doku hierzu Beispiele (guck da mal bitte nach, examples ist ein wahrer Quell von Informationen rund um solche Geschichten).

Verfasst: Montag 27. März 2006, 14:38
von jens

Verfasst: Montag 27. März 2006, 15:16
von Joghurt
BTW: Speziell für "apt-get update" könntest du auch libapt nehmen.

Code: Alles auswählen

from apt.cache import Cache
c = Cache()
c.update()