我正在用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秒输出到stdout,当它执行此操作时会覆盖之前的值。
然而,我遇到了问题,正在研究如何实现# check stdin here
行。理想情况下,用户应该只能按下“p”,并且计时器将暂停。目前,我已经取代了time.sleep(0.1)
:
if select.select([sys.stdin],[],[],0.1)[0]:
print sys.stdin.readline().strip()
...有效,但它要求用户按Enter键才能识别命令。有没有办法这样做而不需要输入按下?
答案 0 :(得分:2)
请参阅此SO question和this article。
这两个都描述了特定于平台的选项或使用像pygame这样的东西。
但是,如果您需要一个不需要任何外部依赖项的跨平台解决方案(例如pygame),我认为您还应该能够通过标准库中的线程模块来实现。 (给我一点,我会尝试使用线程模块拼凑一些东西......)