Графический индикатор прогресса с использованием инструментов командной строки

1

Я хотел бы знать хороший способ сделать индикатор выполнения 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

  • 1
    Вполне может быть, что он по-другому относится к неинтерактивной оболочке. Для текстового индикатора выполнения он, вероятно, использует что-то вроде ncurses, который не работает, если он не на терминале. Я не знаю специфики.
  • 0
    при удаче? Разве -e помочь? Я проверил это - он выводился на stderr при вызове с -e ; и положение символа > кажется быстрым, простым и легким способом вычисления подходящей дроби.
Показать ещё 1 комментарий
Теги:
progress-bar
glade
pygtk

1 ответ

0

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

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

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

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

-e --stderr-progress
          Force  output  of  progress  information  to stderr (for wrapper
          scripts).
  • 0
    как и выше, я обнаружил, что текстовая строка выполнения не отображается в качестве редактирования вопроса выше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню