我使用 Popen() 来生成程序?该程序将在程序中显示“文本”?
如何监控我生成的程序的状态?如何确定 1 分钟内是否没有任何打印输出,我假设程序挂起并且我需要终止进程“p”?
# command is my command to run
p = subprocess.Popen(command,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
我使用 Popen() 来生成程序?该程序将在程序中显示“文本”?
如何监控我生成的程序的状态?如何确定 1 分钟内是否没有任何打印输出,我假设程序挂起并且我需要终止进程“p”?
# command is my command to run
p = subprocess.Popen(command,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
这主要基于python 中 subprocess.PIPE 的非阻塞读取
我们使用单独的线程和队列在一定时间后检查输出,在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()