在Python中同时从stdin捕获单字符输入并输出到stdout
我正在用Python写一个简单的双计时器。 (我在用Linux,这个程序只需要在我的系统上运行。) 这个脚本的想法是有两个独立的计时器,任何时候只有一个在运行。用户可以按一个按钮来切换哪个计时器在运行,或者暂停两个计时器。目前,我的测试脚本看起来是这样的:
now = datetime.datetime.now()
until = now + datetime.timedelta(minutes=2)
print now,
while now < until:
print "\r",
now = datetime.datetime.now()
print now,
sys.stdout.flush()
# check stdin here
time.sleep(0.1)
(这里我省略了代码中的导入部分。)
这个程序每0.1秒输出一次当前计时器的值,并且会覆盖之前的值。
不过,我在实现# check stdin here
这一行时遇到了问题。理想情况下,用户只需按“p”键,计时器就会暂停。目前,我在time.sleep(0.1)
的位置放了这个:
if select.select([sys.stdin],[],[],0.1)[0]:
print sys.stdin.readline().strip()
...这个方法可以工作,但需要用户按下回车键才能识别命令。有没有办法做到这一点,而不需要按回车键呢?