有人可以解释为什么以下命令(“ 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的新手,不知道为什么在上述情况下它的行为有所不同。谢谢。
答案 0 :(得分:1)
您的代码没有问题。结果不同是因为这两个程序对(至少)这些命令使用了不同的输出通道。特别是,git
正在使用stdout
,而python
正在使用stderr
。
为了交叉检查一个程序使用哪个频道,可以使用this answer中指示的方法。