ユーザーが任意のキーを20秒間押すのを待つにはどうすればよいですか?つまり、メッセージを表示して20秒をカウントすると、20秒が経過した場合、またはユーザーがいずれかのキーを押した場合でも、コードは実行を継続します。どうすればPythonでそれを行うことができますか?
質問する
995 次
3 に答える
7
Windows を使用している場合:
def wait_for_user(secs):
import msvcrt
import time
start = time.time()
while True:
if msvcrt.kbhit():
msvcrt.getch()
break
if time.time() - start > secs:
break
于 2012-08-02T19:15:52.787 に答える
2
考えられる解決策の 1 つは、 を使用select
して値を確認することですが、私はそれが好きではありません。時間を無駄にしているように感じます。
一方、Linux システムではシグナリングを使用して問題を処理できます。一定の時間が経過すると、例外が発生してtry
失敗し、コードは次のように続行されexcept
ます。
import signal
class AlarmException(Exception):
pass
def alarmHandler(signum, frame):
raise AlarmException
def nonBlockingRawInput(prompt='', timeout=20):
signal.signal(signal.SIGALRM, alarmHandler)
signal.alarm(timeout)
try:
text = raw_input(prompt)
signal.alarm(0)
return text
except AlarmException:
print '\nPrompt timeout. Continuing...'
signal.signal(signal.SIGALRM, signal.SIG_IGN)
return ''
コードはここから取得しました
于 2012-08-02T19:26:57.337 に答える
0
(警告: テストされていないコード)
何かのようなもの:
import sys
import select
rlist, _, _ = select.select([sys.stdin], [], [], timeout=20)
if len(rlist) == 0:
print "user didnt input anything within 20 secs"
else:
print "user input something within 20 secs. Now you just have to read it"
于 2012-08-02T19:17:38.820 に答える