subprocess.popen 和 subprocess.run 之间有什么区别
- 2025-04-16 08:57:00
- admin 原创
- 15
问题描述:
我是这个subprocess
模块的新手,文档让我很疑惑subprocess.popen
和之间有什么区别subprocess.run
。这两个命令的功能有什么区别吗? 只是其中一个比较新吗? 哪个更好用?
解决方案 1:
subprocess.run()
在 Python 3.5 中添加了 ,以简化subprocess.Popen
只想执行命令并等待其完成的情况,但在此期间不想执行任何其他操作。对于其他情况,您仍然需要使用subprocess.Popen
。
主要区别在于subprocess.run()
执行命令并等待其完成,而subprocess.Popen
你可以在进程完成时继续执行你的工作,然后只需反复调用Popen.communicate()
自身来向进程传递和接收数据。其次,subprocess.run()
返回subprocess.CompletedProcess
。
subprocess.run()
只是包装Popen
,Popen.communicate()
因此您不需要循环来传递/接收数据或等待过程完成。
查看官方文档subprocess.run()
以获取有关传递给Popen
和的参数的信息communicate()
。
解决方案 2:
默认情况下,两者在 Python 中均可用。
调用子进程的推荐方法是使用 run() 函数来处理所有它能处理的用例。对于更高级的用例,可以直接使用底层的 Popen 接口。
-子进程.运行:
import subprocess
import sys
result = subprocess.run([sys.executable, "-c", "print('ocean')"])
-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
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD