Letzte ungepufferte Zeile kann nicht gelesen werden
Ich versuche, die letzte Zeile eines Befehls wie 'apt-get download firefox' zu lesen. Normalerweise sieht die Ausgabe wie folgt aus:
Get:1 http://archive.ubuntu.com/ubuntu/ utopic/main firefox amd64 32.0+build1-0ubuntu2 [34.9 MB]
2% [1 firefox 646 kB/34.9 MB 2%]
, wobei die letzte Zeile ständig aktualisiert wird (es wird keine neue Zeile geschrieben, bis 100% erreicht sind). Mein Ziel ist es nun, den Fortschritt in Echtzeit zu lesen. Hier ist mein aktueller Beispielcode:
#!/usr/bin/python3 -u
# coding=utf-8
import subprocess, sys
pipe = subprocess.Popen(['apt-get', 'download', 'firefox'], 0, stderr = subprocess.PIPE, stdout = subprocess.PIPE)
while True:
content = pipe.stdout.read(1).decode()
if content == '':
break
sys.stdout.write(content)
sys.stdout.flush()
pipe.wait()
Ich habe die Ausgabepufferung für den Unterprozessaufruf und auch für die binäre Ausgabe für den Python-Prozess deaktiviert (mit dem Argument -u). Aber ich bekomme nur die erste Zeile, aber nicht den Fortschritt der zweiten Zeile. Weiß jemand, wie ich das erreichen kann?