我使用Popen()来生成一个程序?该程序将在程序中显示“文本”吗?
如何监控我生成的程序的状态?如何确定1分钟内是否有任何打印输出,我认为该程序已挂起,我需要终止进程'p'?
# command is my command to run
p = subprocess.Popen(command,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
答案 0 :(得分:0)
这主要基于Non-blocking read on a subprocess.PIPE in python
我们使用单独的线程和队列在q.get(timeout=5)
部分给出一定时间后检查输出。如果您只想在60秒后终止进程,请将其更改为60
。将第一个参数更改为subprocess.Popen
为您要运行的相应命令。
import Queue
import subprocess
import threading
def checkStdout(p, q):
s = p.stdout.read(1)
if len(s) > 0:
q.put(s)
def run():
p = subprocess.Popen(['cat'], stdout=subprocess.PIPE, close_fds=True)
print 'pid %d started' % p.pid
q = Queue.Queue()
t = threading.Thread(target=checkStdout, args=(p, q))
t.daemon = True
t.start()
try:
canGet = q.get(timeout=5)
print 'has output'
except Queue.Empty:
print 'no output'
# kill process
p.kill()
if __name__ == '__main__':
run()