Я пытаюсь объединить модули Python для getch и progressbar на Linux, но я не могу заставить его работать. Я хочу использовать getch для прослушивания ввода с клавиатуры, чтобы прервать индикатор выполнения, но когда я вставляю оператор getch, индикатор выполнения отказывается обновляться автоматически, только обновляясь, когда я нажимаю кнопку на клавиатуре.Getch и progressbar
Код, который я сейчас использую, приведен ниже. Я использую ProgressBar2 и модуль getch, но я пробовал использовать tqdm и собственный метод getch безрезультатно.
bar = progressbar.ProgressBar()
for i in range(101):
sleep(0.01)
bar.update(i)
ch = getch.getch()
При использовании моей собственной реализации Геча, я сузил проблему, чтобы быть с «sys.stdin.read (1)» строкой в следующем коде.
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno(), termios.TCSADRAIN)
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
В Windows, используя модуль msvcrt, у меня нет никаких проблем.
Я бы предположил 'files.read()' блоков по умолчанию. Как насчет [urwid] (http://urwid.org/), который имеет цикл событий, события клавиатуры, виджет индикатора выполнения (среди прочего)? – blubberdiblub