"Fake-Terminal"

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
beewee
User
Beiträge: 35
Registriert: Mittwoch 18. Januar 2006, 22:16

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]
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

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).
--- Heiko.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

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()
Antworten