当尝试在子进程上调用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在我见过的其他例子中似乎就足够了。
如果有人能提供一些澄清,我将不胜感激!
1条答案
按热度按时间vfwfrxfs1#
subprocess.run
的返回值是一个subprocess.CompletedProcess
对象。也许在您已经看到的示例中,代码对检查子流程的标准输出不感兴趣,这就是为什么它永远不会被访问。你没有提供任何例子,所以我们只能猜测。