Pythonスクリプトで、タイマー待ち
ただ、一定時間待つ場合、
test.py
import time
waittime = 300
while waittime > 0 :
print(f"{waittime=}",end="\r")
time.sleep(1)
waittime-=1
print()
で、OK。
そんなに待てない。(keyboardモジュールを使ってみる)
5分も待てない。
なにかキーを押すと、タイマーを繰り上げたい。
なるほど、キー入力ならkeyboardモジュールを使おう。
test2.py
import time
import keyboard #pip install keyboard
waittime = 300
endtime = time.time() + waittime
zt = endtime - time.time()
while zt > 0:
zt = endtime - time.time()
print(f"waittime={int(zt)}",end="\r")
if keyboard.is_pressed('q'):
print("qキーが押されました")
break
どや。
ウィンドウが非アクティブでもキーを拾ってしまう。
え?
対策として、アクティブウィンドウのハンドルを取得して、タイトルを拾ったりしてもなかなか安定せず。
getch()で、コンソールから1文字もらう。
コンソールからの入力を拾えれば、アクティブじゃないと入力できないのでgood。
しかし、getch()のみでは、文字が入力されるまで止まってしまうので、kbhit()を併用する。
getch() と kbhit() が、Windows のVCランタイムを使用しているので、Windows限定です。
test3.py
import time
import msvcrt as m
waittime = 300 #秒単位
endtime = time.time() + waittime
print(f"sleep {waittime}sec")
zt = endtime - time.time()
b=b"0"
while zt > 0:
zt = endtime - time.time()
khit = m.kbhit() #キーが押されたら1
if khit == 1 :
b=m.getch()
c=int.from_bytes(b, 'big')
if ord("C") == c or ord("c") == c :
print(f"\nKey '{chr(c)}' pressed continue")
time.sleep(1)
break
print(f"waittime Last {int(zt):3} sec. Hit 'c'key to continue {khit=} {b=}",end="\r")
time.sleep(1)
スリープを適当に入れないと、高負荷になります。
初投稿でした。