检查stdin上的输入是否可用超时

时间:2017-01-07 11:44:08

标签: python

我有一个python脚本,它将从stdin读取的消息发布到网络中的消息队列中。但是,如果在指定的时间内管道上没有任何消息,我必须发送心跳。

所以我必须区分3个案例:

  1. )管道上有可以处理的输入
  2. )在指定的时间内没有输入
  3. )管道工艺已关闭,我们可以优雅地终止。
  4. 目前,我的代码如下:

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

    但是如果有任何超时,我需要中断for look。即sys.stdin一段时间没有提供任何数据。

1 个答案:

答案 0 :(得分:1)

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

这是我终于提出的