当尝试在子进程上调用 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 似乎就足够了。
如果有人能提供一些澄清,我将非常感激!
明确记录,
subprocess.run
的返回值是一个subprocess.CompletedProcess
对象。
也许在您看到的示例中,代码对检查该子进程的标准输出不感兴趣,这就是它永远不会被访问的原因。您没有提供任何示例,所以我们只能猜测。