Графический индикатор прогресса с использованием инструментов командной строки - PullRequest
1 голос
/ 07 мая 2011

Я хотел бы знать хороший способ сделать индикатор выполнения графического интерфейса.Я использую Python, Glade / GTK.Пример программы, которую я хотел бы получить больше, чем просто импульсную полосу.Что-то, что может дать пользователю более точный способ узнать прогресс.Программа, для которой я пытаюсь запечатлеть это cdparanoia, но мне хотелось бы узнать, как это сделать в целом для других программ, таких как wget.Важно отметить, что в этих двух программах информация выводится на stderr.

Я должен отметить, что при выполнении

output = p.stderr.read(1)
print output

Не отображается, что отображается индикатор выполнения текста.Это почти так же, как если бы он по-другому относился к неинтерактивной оболочке.Нет возврата каретки (\ r), как я и думал.

Кодировки такие:

import subprocess, shlex, gtk

command = 'cdparanoia -w -Z 1- - | sox -t wav - "my disk.flac"'

p = subprocess(shlex.split(command), stderr=subprocess.PIPE)

gui = gtk.Builder()
gui.add_from_file("pulsebar.glade")
#do magic here to make a good pulsebar

С благодарностью, Нарни

1 Ответ

0 голосов
/ 07 мая 2011

gtk.ProgressBar ?(Обратите внимание на метод .set_fraction().)

Вот некоторая информация о выполнении неблокирующих операций чтения из подпроцесса.Предложение опроса с тайм-аутом кажется уместным.Кроме того, этот ответ .

Мои смутные воспоминания о индикаторе прогресса cdparanoia в том, что он очень своеобразный.Но я предполагаю, что это просто глупость + '\ r';не должно быть слишком сложно извлечь из него фракцию.

Редактировать : Ладно, на самом деле, возможно, вышеприведенное неверно при нормальных ситуациях использования;но вы пробовали -e?

-e --stderr-progress
          Force  output  of  progress  information  to stderr (for wrapper
          scripts).
...