shell 为什么在stdout上调用子进程时返回字符串,否则返回CompletedProcess的示例

rggaifut  于 12个月前  发布在  Shell
关注(0)|答案(1)|浏览(97)

当尝试在子进程上调用run()时,我注意到如果我在标准输出上将其作为属性调用,我会正确地将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,它应该将它从bytes输出转换为字符串格式。universal_newlines是text=True的更新版本。我试着在它们之间交换,得到了同样的结果。
看起来.run()返回一个CompletedProcess对象,我必须通过属性stdout访问一个字符串。我不认为这是正确的,但这就是我目前的解释。我注意到网上的许多例子都不需要在.run()的末尾加上“.stdout”,text=True / universal_newlines=True在我见过的其他例子中似乎就足够了。
如果有人能提供一些澄清,我将不胜感激!

vfwfrxfs

vfwfrxfs1#

subprocess.run的返回值是一个subprocess.CompletedProcess对象。
也许在您已经看到的示例中,代码对检查子流程的标准输出不感兴趣,这就是为什么它永远不会被访问。你没有提供任何例子,所以我们只能猜测。

相关问题