Python标准库 subprocess 模块多进程编程详解

本文详细介绍了Python的subprocess模块,用于生成新进程执行命令行指令。对比了与multiprocessing的区别,强调subprocess适用于执行非Python的外部程序。文章详细讲解了run()方法、Popen API的使用,包括stdin、stdout、stderr配置,以及如何进行进程间通信。此外,还提供了相关代码示例和实际应用。
摘要由CSDN通过智能技术生成

1.1 基本功能

  • subprocess 模块,允许生成新的进程执行命令行指令,python程序,以及其它语言编写的应用程序, 如 java, c++,rust 应用等。
  • subprocess可连接多个进程的输入、输出、错误管道,并且获取它们的返回码。
  • asyncio也支持subprocess.

许多知名库都在使用此模块创建进程,以及做为跨语言粘合工具。典型如ansible, celery,selenium 等。

1.2 与multiprocessing主要区别

  • multiprocessing 创建的子进程的代码也需要开发者实现。
  • subprocess创建的子进程主要用于运行已有指令或应用。

根据上述主要区别,不难推断出, subprocess创建子进程的用途,主要用于执行非python的外部程序,如windows/linux 命令,C程序,Java程序等,而且可以实现进程通信,多进程管道,以及异步执行等。

1.3 subprocess 模块主要掌握知识点

(1)run()方法创建子进程
(2)stdin, stdout,stderr 的配置,以及管道使用
(3)Popen API使用。
(4)进程之间通信

2 使用run() 方法创建子进程

2.1 run() 语法

subprocess.run(args, \*, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, text=None, env=None)

返回值类型
subprocess.CompletedProcess
主要参数

  • args:表示要执行的命令。必须是以字符串为元素的 list or tuple 。
  • stdin、stdout 和 stderr:子进程的标准输入、输出和错误。其值可以是 subprocess.PIPE、subprocess.DEVNULL、一个已经存在的文件描述符、已经打开的文件对象或者 None。subprocess.PIPE 表示为子进程创建新的管道。subprocess.DEVNULL 表示使用 os.devnull。默认使用的是 None,表示什么都不做。
  • encoding: 如果指定了该参数,则 stdin、stdout 和 stderr 可以接收字符串数据,并以该编码方式编码。否则只接收 bytes 类型的数据。
  • shell:如果该参数为 True,将通过操作系统的 shell 执行指定的命令。
  • check: 如check=true, 当进程退出码为非0时,将生成 CalledProcessError 异常

2.2 返回对象CompletedProcess的主要属性与方法:

主要属性

  • args 执行指令list or tuple
  • returncode 执行完子进程状态码,为0则表明它已经运行完毕,若值为负值 ,表明子进
  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值