2009-11-07 9 views
6

Ich arbeite an einem einfachen GUI-Python-Skript, um einige einfache Aufgaben auf einem System zu erledigen. Ein Teil dieser Arbeit beinhaltet apt-get install, um einige Pakete zu installieren.Analyse der Ausgabe von apt-get install für Fortschrittsbalken

Während dies geschieht, möchte ich einen Fortschrittsbalken anzeigen, der mit dem Fortschritt des Downloads aktualisiert werden sollte, mit dem kleinen Prozentsatz, der in der Schnittstelle von apt-get im Terminal angezeigt wird.

ABER! Ich kann keine Möglichkeit finden, die Fortschrittsinformationen zu erhalten. Piping oder Redirect der Ausgabe von apt-get gibt nur statische Zeilen, die die Meldung "completed download" für jedes Paket anzeigen, und dasselbe für das Lesen über subprocess.Popen() in meinem Skript.

Wie kann ich von der Ausgabe von apt-get lesen, um die Prozentsätze der heruntergeladenen Datei zu erhalten?

Antwort

3

Wie ich oft gesagt habe, verwenden pexpect, nicht subprocess etc, Teilprozesse ausgeführt werden, wenn Sie ihre Dauerleistung erhalten müssen. Pexpect täuscht den Subprozess vor, dass er glaubt, dass er auf einem Terminal läuft, also liefert der Subprozess genau die Art von Ausgabe, die er auf einem echten Terminal geben würde ... und Sie können ihn fangen und in jede Art von schicker Ausgabe verwandeln, die Sie wollen!)

+0

Jede Möglichkeit, dass dies auch in meinem C-Port mit dem Posix popen() funktionieren könnte? Oder gibt es eine ähnliche Methode? –

+2

'popen' lässt den Unterprozess wissen, dass seine Ausgabe eine Pipe ist, also haben Sie wahrscheinlich kein Glück, außer mit Befehlen, die so schön sind, dass Sie sie nach" voller ungepufferter Echtzeitausgabe sowieso pls! "Fragen können. und ich denke nicht, dass apt-get in dieser elitären Gruppe ist. Um ein "gefälschtes Terminal" in C unter Linux zu implementieren, beginne mit der pty (7) man-Seite, z. bei http://linux.die.net/man/7/pty - und, viel Glück (viel Arbeit wird benötigt!). –

5

Anstatt die Ausgabe von apt-get zu analysieren, können Sie python-apt verwenden, um Pakete zu installieren. AFAIK es hat auch Module für die Berichterstattung über den Fortschritt.

+0

Schauen Sie sich an /usr/share/doc/python-apt/examples/progress.py – unutbu

+0

Irgendein Weg, dies ohne Python und ohne das riesige Chaos von libapt zu tun? –