【发布时间】:2021-01-26 03:21:00
【问题描述】:
我是 Python 的初学者,我似乎找不到以下两者之间的区别,
import subprocess
test1 = subprocess.run(['ls', '-la'], capture_output=True)
print(test1.stdout)
test2 = subprocess.check_output(['ls', '-la'])
print(test2)
我发现 test1 和 test2 给了我同样的东西。有什么区别?
还有两个我在谷歌上不明白的术语是 'Popen constructor' 和 'pipe'。如果您也能详细说明这两者以及它们与子流程模块的关系,将会很有帮助。
【问题讨论】:
-
Python 的
subprocess模块提供了具有不同抽象级别的函数。check_output是一种比更通用的run函数检查输出的高级且特定的方法。来自docs:check_output等价于:run(..., check=True, stdout=PIPE).stdout... 完整的函数签名与run()的签名大致相同 - 大多数参数直接通过到那个接口,所以本质上它是一个方便的包装器,用于简化较低抽象层中的常见任务。
标签: python-3.x subprocess pipe stdout popen