subprocess.popen和subprocess.run有什么区别

jat*_*h03 34 python

我是这个subprocess模块的新手,而且工程学让我想知道subprocess.popen和之间的区别是什么subprocess.run.这个命令有什么不同吗?一个人刚刚更新吗?哪个更好用?

Mon*_*Kin 53

subprocess.run 在Python 3.5中添加了一个简化,subprocess.Popen当你只想执行命令并等到它完成时,但你不想同时做任何其他事情.对于其他情况,您仍然需要使用subprocess.Popen.

主要区别在于subprocess.run执行命令并等待它完成,而subprocess.Popen您可以在流程完成时继续执行您的工作,然后反复调用subprocess.communicate自己来传递和接收数据到您的流程.

请注意,subprocess.run实际上正在执行的是调用Popenand communicate,因此您不需要创建循环来传递/接收数据,也不需要等待进程完成.

检查本网站对于其中的参数信息subprocess.run被传递给Popen和给communicate.


小智 8

默认情况下,两者都在 Python 中可用。

调用子流程的推荐方法是对它可以处理的所有用例使用 run() 函数。对于更高级的用例,可以直接使用底层的 Popen 接口。

-子进程.运行

import subprocess
import sys

result = subprocess.run([sys.executable, "-c", "print('ocean')"])
Run Code Online (Sandbox Code Playgroud)

-Subprocess.popen:使用子进程运行多个命令行,通信方法等待进程完成,最后将 stdout 和 stderr 作为元组打印

前任:

import subprocess
process = subprocess.Popen(shell_cmd,
                     stdout = subprocess.PIPE, 
                     stderr = subprocess.PIPE,
                     text = True,
                     shell = True
                     )
std_out, std_err = process.communicate()
std_out.strip(), std_err

Run Code Online (Sandbox Code Playgroud)