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)