检查子进程是否仍在运行,同时逐行读取其输出

时间:2016-03-07 22:20:17

标签: python process subprocess stdin

我在Python中启动=Hyperlink("http://my.jira.com/" & B1,B1)并尝试读取每行输出。不幸的是,如果我的流程仍然存在,我无法找到一种好的测试方法。标准方法似乎是检查subprocess,但似乎总是返回poll()。这是我的代码。

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')) ,它适用于非衍生进程,但似乎Python会处理它启动的进程,因此os.kill(proc.pid, 0)始终会返回。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

逐行处理子进程输出,试试这个:

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()等待终止,而不是立即终止该进程。