Python 3.x supprocess.run(ls';,';-la';],capture#u output=True)、stdout和supprocess.check#u output(ls';,';-la';)之间的区别是什么?

Python 3.x supprocess.run(ls';,';-la';],capture#u output=True)、stdout和supprocess.check#u output(ls';,';-la';)之间的区别是什么?,python-3.x,subprocess,pipe,stdout,popen,Python 3.x,Subprocess,Pipe,Stdout,Popen,我是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 constru

我是Python的初学者,我似乎找不到以下两者之间的区别

import subprocess

test1 = subprocess.run(['ls', '-la'], capture_output=True)
print(test1.stdout)

test2 = subprocess.check_output(['ls', '-la'])
print(test2)
我发现test1test2给了我同样的东西。有什么区别


另外两个我在谷歌搜索时不理解的术语是'Popen constructor''pipe'。如果您能详细说明这两个参数,以及它们与子流程模块的关系,将非常有用。

capture\u输出
参数传递给
subprocess.run
在Python 3.7中是新的

子流程。检查\u输出是否为较旧的高级API:

在Python3.5之前,这三个函数构成了
子流程
的高级API。您现在可以在许多情况下使用
run()
,但许多现有代码都调用这些函数

旧的API仍然保持向后兼容性——删除它们没有什么好处,并且需要很长的弃用期来避免破坏现有代码

Popen
(“进程打开”)是较低级别的API,将由
run
check\u output
等内部使用。“Popen构造函数”是文档化的


子流程只是子流程API对底层操作系统提供的进程间通信特性的抽象。例如,使用外壳
ls-la | grep针
ls
的stdout用管道连接到
grep
的stdin。要在子流程API中执行类似操作,可以在生成子流程时将特殊值
subprocess.PIPE
作为标准输出句柄传递。您可以将管道视为一个小型FIFO缓冲区,它将一个进程的输出传输到另一个进程的输入。

Python的
子进程
模块提供了具有不同抽象级别的函数<代码>检查_输出
是一种比更通用的
运行
功能更高级、更具体的检查输出的方法。从:
check\u输出相当于:
run(…,check=True,stdout=PIPE)。。。完整函数签名与
run()
的签名基本相同-大多数参数直接传递到该接口,因此本质上它是一个方便的包装器,可以简化较低抽象层中的常见任务。