▼
2012年10月6日土曜日
python - 他のプログラムの標準出力を監視する
ブロックしないようにタイムアウト付きの入力を使って
スレッドで時間経過を監視…しているけど、別にスレッド使う必要はなかったような。
少し前に書いた物なので意図を忘れてしまった。
import os
import sys
import time
import threading
import select
startTime = time.time()
endTime = startTime
def inputWithTimeout(timeout_time):
i, o, e = select.select([sys.stdin], [], [], timeout_time)
if (i):
return sys.stdin.readline().strip()
else:
return None
def printUsage():
print 'python ' + os.path.basename(__file__) + ' [KEYWORD] [TIMEOUT(S)]'
def timeoutMonitorWorker():
timeout = False
while not timeout:
now = time.time()
if now > endTime:
timeout = True
try:
time.sleep(1)
except KeyboardInterrupt:
timeout = True
if __name__ == '__main__':
argv = sys.argv
argc = len(argv)
if argc != 3:
print printUsage()
sys.exit(1)
endTime += int(argv[2])
timeOutMonitorThread = threading.Thread(target=timeoutMonitorWorker)
timeOutMonitorThread.daemon = True
timeOutMonitorThread.start()
while True:
try:
if not timeOutMonitorThread.isAlive():
print 'Monitor : Timeout...'
sys.exit(-1)
stdInput = inputWithTimeout(1)
if stdInput == "":
print 'EOF Detected...'
sys.exit(-1)
if stdInput == None:
continue
print stdInput
if stdInput == argv[1]:
print 'Monitor : ' + 'Keyword [%s] found' % argv[1]
sys.exit()
except EOFError:
print 'Monitor : EOF detected...'
sys.exit(-1)
0 件のコメント:
コメントを投稿