2017-01-07 23 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我最後用

想出了