2009-11-07 4 views
6

Я работаю над простым графическим интерфейсом графического интерфейса Python для выполнения простых задач в системе. Некоторые из этих работ включают в себя apt-get install для установки некоторых пакетов.Анализ вывода apt-get install для индикатора выполнения

Пока это происходит, я хочу отобразить индикатор выполнения, который должен обновляться с ходом загрузки, используя небольшой процент, показанный в интерфейсе apt-get в терминале.

НО! Я не могу найти способ получить информацию о ходе работы. Трубопровод или перенаправление вывода apt-get просто дает статические строки, которые показывают сообщение «завершена загрузка» для каждого пакета, а также для чтения через subprocess.Popen() в моем скрипте.

Как я могу прочитать из вывода apt-get, чтобы получить проценты загруженного файла?

ответ

3

Как я уже говорил, используйте pexpect, не подпроцесс и т. Д., Чтобы запускать подпроцессы, когда вам нужно получить их непрерывный выход. pexpect обманывает подпроцесс, полагая, что он работает на терминале, поэтому подпроцесс будет предоставлять только тот вид вывода, который он даст на реальном терминале ... и вы можете поймать его и превратить в любой вид фантазии, который вы хотите!)

+0

Любые шансы, что это может работать и на моем C-порту, используя posix popen()? Или есть аналогичный метод? –

+2

'popen' позволит субпроцессу знать, что его вывод - это труба, поэтому вам, вероятно, не повезло, кроме как с командами, которые достаточно хороши, чтобы вы могли спросить их о« полном небуферизованном выводе в реальном времени в любом случае PLS! ». и я не думаю, что apt-get находится в этой элитной группе. Чтобы реализовать «поддельный терминал» в C под Linux, начните с man-страницы pty (7), например. на http://linux.die.net/man/7/pty - и, удачи (много работы будет необходимо!). –

5

Вместо синтаксического анализа вывода apt-get вы можете использовать python-apt для установки пакетов. AFAIK также имеет модули для сообщения о прогрессе.

+0

Посмотрите на /usr/share/doc/python-apt/examples/progress.py – unutbu

+0

Любой способ сделать это без Python и без огромного беспорядка libapt? –

 Смежные вопросы

  • Нет связанных вопросов^_^