Python 2.7: читать со стандартного ввода без запроса
Я пытаюсь сделать систему сигнализации Arduino Yun. Он должен делать запросы на мой веб-сервер, чтобы обновить свою статистику. Также необходимо следить за кнопкой и датчиком движения. На стороне Linux работает скрипт на 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 ответа
Я посмотрел на комментарий 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.
Простое решение, которое ожидает одну строку данных. Использует файл-подобный объект sys.stdin.
import sys
while True:
print "Pre"
sys.stdin.readline()
print "Post"