在逐行读取其输出时检查子进程是否仍为 运行
Check if subprocess is still running while reading its output line by line
我在 Python 中开始 subprocess
并尝试读取每一行输出。不幸的是,如果我的流程还活着,我找不到好的测试方法。标准方法似乎是检查 poll()
,但似乎总是 return None
。这是我的代码。
proc = Popen(sys.argv[1:], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
while True:
process_line(proc.stdout.readline().decode('utf-8'))
if not proc.poll():
break
for line in proc.communicate()[0].splitlines():
process_line(line.decode('utf-8'))
我也尝试过使用 os.kill(proc.pid, 0)
,它适用于非派生进程,但似乎 Python 控制它启动的进程,所以 os.kill(proc.pid, 0)
总是 returns.
我做错了什么?
要逐行处理子进程输出,试试这个:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=1)
while p.poll() is None:
line = p.stdout.readline()
...do something with the line here
注意我将缓冲区大小设置为 1。
另外,不需要os.kill(proc.pid, 0)
。只需打电话
.kill()
在您生成的子进程上。您也可以调用 .wait()
等待终止,而不是立即终止进程。
我在 Python 中开始 subprocess
并尝试读取每一行输出。不幸的是,如果我的流程还活着,我找不到好的测试方法。标准方法似乎是检查 poll()
,但似乎总是 return None
。这是我的代码。
proc = Popen(sys.argv[1:], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
while True:
process_line(proc.stdout.readline().decode('utf-8'))
if not proc.poll():
break
for line in proc.communicate()[0].splitlines():
process_line(line.decode('utf-8'))
我也尝试过使用 os.kill(proc.pid, 0)
,它适用于非派生进程,但似乎 Python 控制它启动的进程,所以 os.kill(proc.pid, 0)
总是 returns.
我做错了什么?
要逐行处理子进程输出,试试这个:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=1)
while p.poll() is None:
line = p.stdout.readline()
...do something with the line here
注意我将缓冲区大小设置为 1。
另外,不需要os.kill(proc.pid, 0)
。只需打电话
.kill()
在您生成的子进程上。您也可以调用 .wait()
等待终止,而不是立即终止进程。