Я хотел бы знать хороший способ сделать индикатор выполнения GUI. Я использую 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
благодарен, Narnie
? (Обратите внимание на метод .set_fraction()
.)
Ниже приведена информация о выполнении неблокирующих чтений из подпроцесса. Предложение опроса с таймаутом кажется подходящим. Кроме того, этот ответ.
Моя туманная память о индикаторе прогресса cdparanoia заключается в том, что она очень своеобразна. Но я предполагаю, что это просто глупый материал + '\ r'; не должно быть слишком сложно извлечь часть из него.
Изменить: Хорошо, на самом деле, возможно, приведенное выше неверно в обычных ситуациях использования; но вы пробовали -e
?
-e --stderr-progress
Force output of progress information to stderr (for wrapper
scripts).
-e
помочь? Я проверил это - он выводился на stderr при вызове с-e
; и положение символа>
кажется быстрым, простым и легким способом вычисления подходящей дроби.