Python 2.7:从标准输入读取而不提示

Python 2.7: read from stdin without prompting

我正在尝试制作一个 Arduino Yun 警报系统。它需要向我的 Web 服务器发出请求以更新其统计信息。它还需要监控一个按钮和一个运动传感器。 Linux 端是 运行ning 一个 python 脚本,它将发出网络请求。我需要让 Arduino 将其状态发送到 python 脚本。在 python 脚本中,我需要从 Arduino 端读取。我可以用 print raw_input() 来做到这一点,但我希望它只在有可用的情况下读取,我不希望它在没有可用的情况下阻塞。例如:

import time
while 1:
    print "test"
    time.sleep(3)
    print raw_input()
    time.sleep(3)

如果我 运行 它,我希望它打印:

test

(6 seconds later)

test

而不是

test
(Infinite wait until I type something in)

我试过线程,但它们有点难用。

等待单行数据的简单解决方案。使用类似文件的 sys.stdin 对象。

import sys

while True:
    print "Pre"
    sys.stdin.readline()
    print "Post"

我查看了 jakekimds 的评论,发现我可以这样做:

while 1:
    rlist,_,_=select([sys.stdin],[],[],0)
    content=""
    while rlist:
        content+=raw_input()
        rlist,_,_=select([sys.stdin],[],[],0)
    print "blocking task - content:"+content
    time.sleep(5)

这将:

  1. 如果来自 stdin 的内容可用,则将其存储在 content
  2. 执行阻塞任务。
  3. 睡眠 5 秒。
  4. 返回步骤 1。