2017-01-07 21 views
0

我有一个python脚本,它将从标准输入读取的消息发布到网络中的消息队列中。但是,如果管道上没有任何消息持续指定的时间,我必须发送心跳信号。检查输入是否在超时的stdin上可用

所以我有3个情况之间进行区分:

  1. )上有可以处理
  2. 管道输入)没有输入的时间
  3. 一些特定量
  4. )的管道过程已关闭,我们可以优雅地终止。

目前,我的代码看起来如下:

import sys 
for i, line in enumerate(sys.stdin): 
    connection.publish(line) 
connection.close() 

不过,我需要中断了一下,如果有任何超时。即sys.stdin在一段时间内没有提供任何数据。

回答

0
import sys 
import select 


while True: 
    try: 
     if select.select([sys.stdin,],[],[],2.0)[0]: 
      line = sys.stdin.next() 
      print "Got:", line 
     else: 
      print "No data for 2 secs" 

    except StopIteration: 
     print 'EOF!' 
     break 

这是whay我最后用

想出了