如何通过子流程运行非结束流程并分别收集STDOUT和STDERR

时间:2018-11-06 11:58:25

标签: python subprocess

我有一个像这样执行subprocess.Popen的python程序;

process = subprocess.Popen(stand_alone_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = process.communicate()
print "out: ", out
print "err: ", err

如果我的stand_alone_command可以永远运行,我如何才能将stand_alone_command扔到STDOUT和STDERR上,以便我可以对其进行记录。

1 个答案:

答案 0 :(得分:-1)

请尝试从标准输出中读取内容,而不要调用诸如{.1的communicate()

import subprocess
sac = ['tail', '-f', '/var/log/syslog']
process = subprocess.Popen(sac, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while 1:
    line = process.stdout.readline()
    if line:
        print(line)

我认为您需要设置shell=False,但是我在Linux和Windows上有所不同。