Python子进程空输出

Python子进程空输出,python,process,subprocess,Python,Process,Subprocess,我有以下代码: pprocess = subprocess.Popen('PROGRAM', stdout=subprocess.PIPE) while True: output = pprocess.stdout.readline() print 'output = ', output 但是,输出不是使用python代码打印的,而是在控制台上打印的,似乎是直接从进程打印的 有人遇到过这个问题吗?一旦您通过执行stdout.readline从stdout流中读取,它将变为空。

我有以下代码:

pprocess = subprocess.Popen('PROGRAM', stdout=subprocess.PIPE)

while True:
    output = pprocess.stdout.readline()
    print 'output = ', output
但是,输出不是使用python代码打印的,而是在控制台上打印的,似乎是直接从进程打印的


有人遇到过这个问题吗?

一旦您通过执行
stdout.readline
stdout流中读取,它将变为空。您必须将
Popen
调用移动到while循环中,或者更改逻辑:

while True:
    pprocess = subprocess.Popen('PROGRAM', stdout=subprocess.PIPE)
    output = pprocess.stdout.readline()
    print 'output = ', output
但是输出不是使用python代码打印的,而是在控制台上打印的

输出似乎打印在STDERR流上,而不是STDOUT流上;你只不过是在抓捕那个傻瓜

因此,也使用
stderr
流:


作为旁注,在
while
循环中使用
readline()
,只需迭代由
Popen.stdout
/
Popen.stderr
提供的类似文件的对象,哪些是迭代器。

当您在终端中调用时,
程序
返回什么?它在终端上正确打印输出您需要将
popen
移动到while循环中。为什么?它将导致每次“for line in pprocess.stderr:”行出现阻塞时打开popen,流停止there@JayR.W从终端运行
程序2>/dev/null
。你有输出吗?(这是为了确认输出实际上正在写入STDERR)正在写入的输出与我从这行代码接收的输出不同:“print=self.sip_process.STDERR.readline()”
pprocess = subprocess.Popen('PROGRAM', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# Checking just the STDERR here
for line in pprocess.stderr:
    print(line)