0

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 モジュールを使用して、何の問題もありません。

4

1 に答える 1