Python подождет x секунд для клавиши и продолжит выполнение, если не нажата - PullRequest
6 голосов
/ 30 мая 2011

Я n00b для Python, и я ищу фрагмент кода / пример, который выполняет следующее:

  • Отображение сообщения типа «Нажмите любую клавишу для настройки или подождите X секунд, чтобы продолжить»
  • Подождите, например, 5 секунд и продолжите выполнение, или введите подпрограмму configure (), если нажата клавиша.

Спасибо за вашу помощь!

Иван Янссенс

Ответы [ 3 ]

18 голосов
/ 30 мая 2011

Если вы работаете в Unix / Linux, вам поможет модуль select .

import sys
from select import select

print "Press any key to configure or wait 5 seconds..."
timeout = 5
rlist, wlist, xlist = select([sys.stdin], [], [], timeout)

if rlist:
    print "Config selected..."
else:
    print "Timed out..."

Если вы работаете в Windows, посмотрите на модуль msvcrt . (Обратите внимание, что это не работает в IDLE, но будет в командной строке cmd)

import sys, time, msvcrt

timeout = 5
startTime = time.time()
inp = None

print "Press any key to configure or wait 5 seconds... "
while True:
    if msvcrt.kbhit():
        inp = msvcrt.getch()
        break
    elif time.time() - startTime > timeout:
        break

if inp:
    print "Config selected..."
else:
    print "Timed out..."

Редактировать Изменены примеры кода, чтобы вы могли определить, был ли таймаут или нажатие клавиши ...

1 голос
/ 31 июля 2015

Если вы объедините time.sleep, threading.Thread и sys.stdin.read, вы можете легко подождать указанное количество времени для ввода и затем продолжить.

t = threading.Thread(target=sys.stdin.read(1) args=(1,))
t.start()
time.sleep(5)
t.join()
1 голос
/ 30 мая 2011

Python не имеет никакого стандартного способа уловить это, он получает ввод с клавиатуры только через input () и raw_input ().

Если вы действительно этого хотите, вы можете использовать Tkinter или pygame, чтобы воспринимать нажатия клавиш как «события». Есть также некоторые решения для конкретных платформ, такие как pyHook. Но если это не совсем важно для вашей программы, я предлагаю вам заставить ее работать по-другому.

...