在stdin中捕获单字符输入,同时在Python中输出到stdout

时间:2010-05-20 14:07:15

标签: python

我正在用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键才能识别命令。有没有办法这样做而不需要输入按下?

1 个答案:

答案 0 :(得分:2)

请参阅此SO questionthis article

这两个都描述了特定于平台的选项或使用像pygame这样的东西。

但是,如果您需要一个不需要任何外部依赖项的跨平台解决方案(例如pygame),我认为您还应该能够通过标准库中的线程模块来实现。 (给我一点,我会尝试使用线程模块拼凑一些东西......)