Ich versuche, die getch und progressbar Python-Module unter Linux zu kombinieren, aber ich kann es nicht zum Laufen bringen. Ich möchte getch verwenden, um auf Tastatureingaben zu warten, um den Fortschrittsbalken zu unterbrechen, aber wenn ich die getch-Anweisung einfüge, verweigert der Fortschrittsbalken die automatische Aktualisierung, nur wenn ich eine Taste auf der Tastatur drücke.Getch und progressbar
Der Code, den ich derzeit verwende, ist unten. Ich benutze ProgressBar2 und das getch-Modul, aber ich habe versucht, tqdm und meine eigene getch-Methode ohne Erfolg zu verwenden.
bar = progressbar.ProgressBar()
for i in range(101):
sleep(0.01)
bar.update(i)
ch = getch.getch()
Als meine eigene Implementierung von getch verwenden, ich habe das Problem eingrenzen mit der ‚sys.stdin.read (1)‘ Zeile in dem folgenden Code zu sein.
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
Unter Windows, mit dem msvcrt-Modul, habe ich keinerlei Probleme.
Ich würde 'file.read()' Blöcke standardmäßig annehmen. Wie wäre es mit [urwid] (http://urwid.org/), die eine Ereignisschleife, Tastaturereignisse, ein Fortschrittsbalken-Widget (unter anderem) hat? – blubberdiblub