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)
这将:
- 如果来自 stdin 的内容可用,则将其存储在
content
。
- 执行阻塞任务。
- 睡眠 5 秒。
- 返回步骤 1。
我正在尝试制作一个 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)
这将:
- 如果来自 stdin 的内容可用,则将其存储在
content
。 - 执行阻塞任务。
- 睡眠 5 秒。
- 返回步骤 1。