繁体   English   中英

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

[英]Why does reading from “git --version” show up on a different channel from “python --version” via 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的新手,不知道为什么在上述情况下它的行为有所不同。 谢谢。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM