2009-11-07 12 views
6

Pracuję nad prostym skryptem w języku Python, aby wykonać proste zadania w systemie. Niektóre z tych prac obejmują apt-get install, aby zainstalować niektóre pakiety.Parsowanie wyjścia instalacji apt-get dla paska postępu

Podczas tej operacji chcę wyświetlić pasek postępu, który powinien zaktualizować się wraz z postępem pobierania, wykorzystując niewielki procent pokazany w interfejsie apt-get w terminalu.

ALE! Nie mogę znaleźć sposobu na uzyskanie informacji o postępach. Pipingowanie lub przekierowanie wyjścia apt-get daje tylko statyczne linie, które pokazują komunikat "ukończone pobieranie" dla każdego pakietu, i to samo dla odczytu za pomocą subprocess.Popen() w moim skrypcie.

Jak mogę odczytać dane wyjściowe apt-get, aby uzyskać procenty pobranego pliku?

Odpowiedz

3

Jak często mówiłem, używaj pexpect, nie podprocesu itp., Aby uruchamiać podprocesy, kiedy potrzebujesz uzyskać ich ciągłe wyjście. Pexpect oszukuje subproces do przekonania, że ​​działa na terminalu, więc podproces zapewni tylko taki rodzaj wyjścia, jaki dałby na prawdziwym terminalu ... i możesz go złapać i przekształcić w dowolny pożądany wynik!)

+0

Jest szansa, że ​​to może działać w moim porcie C, jak również przy użyciu posix popen()? Czy istnieje podobna metoda? –

+2

'popen' pozwoli podprocesowi wiedzieć, że jego wyjście jest potokiem, więc prawdopodobnie masz pecha, z wyjątkiem poleceń, które są na tyle miłe, aby pozwolić ci zapytać ich o" pełne niebuforowane wyjście w czasie rzeczywistym i tak! " i nie sądzę, że apt-get jest w tej elitarnej grupie. Aby zaimplementować "fałszywy terminal" w C pod Linuksem, zacznij od strony podręcznika pty (7), np. na http://linux.die.net/man/7/pty - i, powodzenia (potrzeba dużo pracy!). –

5

Zamiast analizować dane wyjściowe apt-get, można użyć programu python-apt do instalacji pakietów. AFAIK ma również moduły do ​​zgłaszania postępu.

+0

Spójrz na /usr/share/doc/python-apt/examples/progress.py – unutbu

+0

Jakikolwiek sposób to zrobić bez Pythona i bez wielkiego bałaganu libapt? –

Powiązane problemy