将包含subprocess.call()的Python脚本的Python输出设置为饱和的问题

时间:2019-02-20 08:24:00

标签: python

这是我的问题。尝试捕获Python输出时,subprocess.call()输出错误地位于print()输出之前。我正在Windows 10上使用Python 3.7.2从命令窗口运行Python。

这是一个说明问题的小例子:

import subprocess

print("test")
subprocess.call("where python",shell=True)

请注意,print()输出应位于subprocess.call()输出之前。

这是我在不捕获输出的情况下得到的结果:

c:\Users\GeoffAlexander\Documents\Python>python test.py
test
C:\Users\GeoffAlexander\AppData\Local\Programs\Python\Python37-32\python.exe>
c:\Users\GeoffAlexander\Documents\Python>

print()输出正确地位于subprocess.call()输出之前。

但是,当我将输出重定向到文件时,这就是我得到的:

c:\Users\GeoffAlexander\Documents\Python>python test.py > test.out

c:\Users\GeoffAlexander\Documents\Python>cat test.out
C:\Users\GeoffAlexander\AppData\Local\Programs\Python\Python37-32\python.exe
test

c:\Users\GeoffAlexander\Documents\Python>

请注意,subprocess.call()输出错误地位于print()输出之前。

为什么会这样?如何以正确的顺序捕获Python输出?

2 个答案:

答案 0 :(得分:1)

  

如何以正确的顺序捕获Python输出?

你好

在打印呼叫后,请尝试刷新标准输出,例如:

az login

输出将正确(在Linux系统上测试):

import subprocess
import sys

print("test")
sys.stdout.flush()
subprocess.call("echo python",shell=True)

答案 1 :(得分:0)

您需要通过管道与子流程进行通信

有关示例,请参见https://www.endpoint.com/blog/2015/01/28/getting-realtime-output-using-python