Linux で getch と progressbar の Python モジュールを組み合わせようとしていますが、うまくいきません。getch を使用してプログレス バーを中断するキーボード入力をリッスンしたいのですが、getch ステートメントを挿入すると、プログレス バーは自動的に更新されず、キーボードのボタンを押したときにのみ更新されます。
私が現在使用しているコードは以下のとおりです。私は ProgressBar2 と getch モジュールを使用していますが、tqdm と独自の getch メソッドを試してみましたが、うまくいきませんでした。
bar = progressbar.ProgressBar()
for i in range(101):
sleep(0.01)
bar.update(i)
ch = getch.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 モジュールを使用して、何の問題もありません。