Python 2.7:从stdin读取而不提示

时间:2015-03-28 18:19:32

标签: python python-2.7 arduino stdin arduino-yun

我试图建立一个Arduino Yun警报系统。它需要向我的Web服务器发出更新其统计信息的请求。它还需要监控按钮和运动传感器。 Linux方面正在运行一个将发出Web请求的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)

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

2 个答案:

答案 0 :(得分:0)

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

import sys

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

答案 1 :(得分:0)

我查看了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步。