Python 3.x supprocess.run(ls';,';-la';],capture#u output=True)、stdout和supprocess.check#u output(ls';,';-la';)之间的区别是什么?
我是Python的初学者,我似乎找不到以下两者之间的区别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
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'。如果您能详细说明这两个参数,以及它们与子流程模块的关系,将非常有用。将
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()
的签名基本相同-大多数参数直接传递到该接口,因此本质上它是一个方便的包装器,可以简化较低抽象层中的常见任务。