为什么通过子进程从“ git --version”读取的内容与“ python --version”显示在不同的频道上?

时间:2019-07-25 19:44:51

标签: python python-2.7 subprocess

有人可以解释为什么以下命令(“ python --version”)的输出将变为标准错误而不是标准输出吗?

import shlex, subprocess

cmd = subprocess.Popen(shlex.split("git --version"), stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=False)

std_out, std_err = cmd.communicate()

print("std_out: {}".format(std_out))
print("std_err: {}".format(std_err))

cmd = subprocess.Popen(shlex.split("python --version"), stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=False)

std_out, std_err = cmd.communicate()

print("std_out: {}".format(std_out))
print("std_err: {}".format(std_err))

这是打印出来的内容:

std_out: git version 2.19.2

std_err: 
std_out: 
std_err: Python 2.7.15

我是python的新手,不知道为什么在上述情况下它的行为有所不同。谢谢。

1 个答案:

答案 0 :(得分:1)

您的代码没有问题。结果不同是因为这两个程序对(至少)这些命令使用了不同的输出通道。特别是,git正在使用stdout,而python正在使用stderr

为了交叉检查一个程序使用哪个频道,可以使用this answer中指示的方法。