0

我正在尝试制作一个 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)

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

4

2 回答 2

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. 如果来自标准输入的内容可用,则将其存储在content.
  2. 执行阻塞任务。
  3. 睡眠 5 秒钟。
  4. 回到步骤 1。
于 2015-03-29T00:19:12.783 回答
0

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

import sys

while True:
    print "Pre"
    sys.stdin.readline()
    print "Post"
于 2015-03-28T19:15:58.037 回答