【发布时间】:2015-04-01 20:50:12
【问题描述】:
我正在用 Python 编写一个在我的 Raspberry Pi 上运行的程序。众所周知,Raspberry 可以接收多种输入方式。我正在使用键盘和另一个外部输入源。这只是为了上下文化,对问题本身并不重要。
在我的程序中,我等待键盘输入,如果在短时间内没有输入,我会跳过并寻找其他来源的输入。为此,我使用以下代码:
import sys
import time
from select import select
timeout = 4
prompt = "Type any number from 0 up to 9"
default = 99
def input_with(prompt, timeout, default):
"""Read an input from the user or timeout"""
print prompt,
sys.stdout.flush()
rlist, _, _ = select([sys.stdin], [], [], timeout)
if rlist:
s = int(sys.stdin.read().replace('\n',''))
else:
s = default
print s
return s
我将在没有全键盘的情况下运行 Raspberry Pi,这意味着我将没有返回键。以这种方式将无法验证键盘输入。
我的疑问是是否可以在不按 enter 并保持输入超时的情况下获取用户输入。
我看到很多话题都在谈论这两个问题(超时和输入而不按返回),但两者都没有。
提前感谢您的帮助!
【问题讨论】:
-
这是一个有趣的问题。
stdin不是这样工作的,它是一行一行的。您将不得不考虑以某种方式直接捕获 tty。想想当你在登录时输入密码时,它是如何绕过标准输入的。
标签: python-2.7 input timeout