为什么子进程在标准输出上调用时返回一个字符串,否则返回 CompletedProcess 的实例

问题描述 投票:0回答:1

当尝试在子进程上调用 run() 时,我注意到如果我将其作为 stdout 上的属性调用,我会正确地将 str 作为我的类型。

out = subprocess.run(['ls'], check=True, capture_output=True , universal_newlines=True).stdout
print(type(out))
#returns: <class 'str'>

但是,删除“.stdout”后,我得到了 CompletedProcess 的实例:

out = subprocess.run(['ls'], check=True, capture_output=True , universal_newlines=True)
print(type(out))
#returns: <class 'subprocess.CompletedProcess'>

我已经包含了 universal_newlines ,它应该将其从字节输出转换为字符串格式。 universal_newlines 是 text=True 的更新版本。我尝试在它们之间交换,给了我相同的结果。

看起来 .run() 返回一个 CompletedProcess 对象,我必须通过属性 stdout 访问一个字符串。我不认为这是正确的,但这就是我目前的解释方式。我注意到许多在线示例都不必在 .run() 末尾添加“.stdout”,在我见过的其他示例中,text=True / universal_newlines=True 似乎就足够了。

如果有人能提供一些澄清,我将非常感激!

python python-3.x shell subprocess command
1个回答
0
投票

明确记录

subprocess.run
的返回值是一个
subprocess.CompletedProcess
对象。

也许在您看到的示例中,代码对检查该子进程的标准输出不感兴趣,这就是它永远不会被访问的原因。您没有提供任何示例,所以我们只能猜测。

© www.soinside.com 2019 - 2024. All rights reserved.