python内置模块subprocess 模块,创建和管理子进程

news2024/12/27 12:11:24
一、简介

subprocess 是 Python 标准库中的一个模块,用于创建和管理子进程。它提供了一种在 Python 程序中启动新进程、连接到它们的输入/输出/错误管道以及获取它们的返回值的方法。
使用 subprocess 模块,你可以在 Python 程序中执行外部命令、调用其他可执行文件,并与它们进行交互。这使得你可以利用 Python 的强大功能来自动化和控制其他程序的执行。

二、subprocess.Popen 函数,启动一个新的子进程并与其进行交互
  1. popen = subprocess.Popen(args,…,process_group=None):创建popen对象
  • args:要执行的命令,可以是一个字符串或一个字符串列表。如果是字符串列表,则每个元素都将作为一个单独的参数传递给命令。
  • bufsize:用于指定缓冲区的大小。默认值为 -1,表示使用系统默认的缓冲区大小。
  • executable:用于指定要执行的可执行文件的路径。默认为 None,表示使用系统默认的可执行文件查找规则。
  • stdin、stdout、stderr:这些参数用于指定子进程的标准输入、标准输出和标准错误的管道。它们可以是文件对象、文件描述符或 subprocess.PIPE(用于创建一个新的管道)。
  • preexec_fn:一个可调用对象,在子进程执行前被调用。它可以用于设置子进程的环境、文件描述符等。
  • close_fds:一个布尔值,用于指定是否在子进程中关闭不需要的文件描述符。默认为 True,表示关闭不需要的文件描述符。
  • shell:一个布尔值,用于指定是否通过系统的 shell 来执行命令。默认为 False,表示直接执行命令而不使用 shell。
  • cwd:用于指定子进程的当前工作目录。
  • env:一个字典,用于指定子进程的环境变量。默认为 None,表示继承当前进程的环境变量。
  • universal_newlines:一个布尔值,用于指定是否将输入/输出数据作为文本处理,并使用通用换行符模式。默认为 None,表示根据系统平台自动选择是否以文本模式处理。
  • startupinfo:一个 subprocess.STARTUPINFO 对象,用于指定子进程的启动信息。
  • creationflags:一个整数,用于指定创建子进程的标志。默认为 0,表示使用默认标志。
  • restore_signals:一个布尔值,用于指定是否在子进程中恢复信号处理程序。默认为 True,表示恢复信号处理程序。
  • start_new_session:一个布尔值,用于指定是否在子进程中启动新的会话。默认为 False,表示不启动新的会话。
  • pass_fds:一个整数列表,用于指定在子进程中保持打开状态的文件描述符。
  • encoding、errors、text:这些参数用于指定文本数据的编码和错误处理方式。它们在 Python 3 中引入,用于替代 universal_newlines 参数。
  • umask:一个整数,用于指定子进程的文件模式创建掩码。默认为 -1,表示使用当前进程的掩码。
  • pipesize:一个整数,用于指定管道的大小。默认为 -1,表示使用系统默认的管道大小。
  • process_group:一个整数,用于指定子进程的进程组 ID。
  1. popen.poll():用于检查子进程(命令)是否已经执行结束,没结束返回None,结束后返回状态码。
  2. popen.wait(timeout=None):等待子进程结束,并返回状态码;如果在timeout指定的秒数之后进程还没有结束,将会抛出一个TimeoutExpired异常。
  3. popen.communicate(input=None, timeout=None):该方法可用来与进程进行交互,比如发送数据到stdin,从stdout和stderr读取数据,直到到达文件末尾。
  4. popen.send_signal(signal):发送指定的信号给这个子进程。
  5. popen.terminate():停止该子进程。
  6. popen.kill():杀死该子进程。
  7. popen.stdin:如果在创建Popen对象时参数stdin被设置为PIPE,Popen.stdin将返回一个文件对象用于策子进程发送指令。否则返回None。
  8. popen.stdout:如果在创建Popen对象时参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回None。
  9. popen.stderr:如果在创建Popen对象时参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回None。
  10. popen.pid:获取子进程的进程ID。
  11. popen.returncode:获取进程的返回值。如果进程还没有结束,返回None。
  12. popen.args:获取传递给 Popen 的命令参数。
  13. popen.universal_newlines:布尔值,表示是否以文本模式处理输入/输出数据,并使用通用换行符模式。如果在创建 Popen 对象时指定了 universal_newlines=True,则 popen.universal_newlines 将为 True。
三、subprocess模块中的常用函数,都是基于subprocess.Popen实现
  1. subprocess.run(*popenargs, input=None, capture_output=False, timeout=None, check=False, **kwargs):执行指定的命令,等待命令完成,并返回一个 CompletedProcess 对象,其中包含有关命令执行的信息,如返回码、标准输出和标准错误输出。
  • popenargs:要执行的命令及其参数,可以是一个字符串或一个字符串列表。
  • input:用于向子进程发送的输入。它可以是一个字节字符串。
  • capture_output:一个布尔值,用于指定是否捕获子进程的标准输出和标准错误输出。
  • timeout:一个可选的超时时间,用于指定等待命令完成的最长时间。
  • check:一个布尔值,用于指定是否检查命令的返回码,并在返回码非零时引发异常。
  • **kwargs:其他关键字参数,用于传递给 subprocess.Popen 构造函数。
  1. subprocess.call(*popenargs, timeout=None, **kwargs):执行指定的命令,等待命令完成,并返回命令的返回码。
  • popenargs:要执行的命令及其参数,可以是一个字符串或一个字符串列表。
  • timeout:一个可选的超时时间,用于指定等待命令完成的最长时间。
  • **kwargs:其他关键字参数,用于传递给 subprocess.Popen 构造函数。
  1. subprocess.check_call(*popenargs, **kwargs):执行指定的命令,等待命令完成。如果命令的返回码非零,则引发 CalledProcessError 异常。
  • popenargs:要执行的命令及其参数,可以是一个字符串或一个字符串列表。
  • **kwargs:其他关键字参数,用于传递给 subprocess.Popen 构造函数。
  1. subprocess.check_output(*popenargs, timeout=None, **kwargs):执行指定的命令,等待命令完成,并返回命令的输出结果。
  • popenargs:要执行的命令及其参数,可以是一个字符串或一个字符串列表。
  • timeout:一个可选的超时时间,用于指定等待命令完成的最长时间。
  • **kwargs:其他关键字参数,用于传递给 subprocess.Popen 构造函数。
  1. subprocess.getoutput(cmd, *, encoding=None, errors=None):执行指定的命令,并返回命令的输出结果作为一个字符串。
  • cmd:要执行的命令。
  • encoding:用于解码命令输出的字符编码。
  • errors:用于指定解码命令输出时的错误处理方式。
  • subprocess.getoutput() 函数
  1. subprocess.getstatusoutput(cmd, *, encoding=None, errors=None):执行指定的命令,并返回一个元组,包含命令的返回码和输出结果。
  • cmd:要执行的命令。
  • encoding:用于解码命令输出的字符编码。
  • errors:用于指定解码命令输出时的错误处理方式。
  1. subprocess.list2cmdline(seq):将字符串序列转换为一个单独的字符串,用于表示命令行参数。它使用与操作系统相关的规则来转义和引用参数。
  • seq:一个字符串序列。
四、解决输入输出报编码错误的bug
import subprocess
from functools import partial
subprocess.Popen = partial(subprocess.Popen,encoding='utf-8')

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1217797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【第2章 Node.js基础】2.7 Node.js 的流(一) 可读流

🌈 Node.js 的流 🚀什么是流 流不是 Node.js 特有的概念。它们是几十年前在 Unix 操作系统中引入的。 我们可以把流看作这些数据的集合,就像液体一样,我们先把这些液体保存在一个容器里(流的内部缓冲区 BufferList&…

【Android】设置全局标题栏

序言 在做项目的时候,有时候需要一个全局统一的标题栏,保证项目风格的统一,但是如果在每个activity上面都写一遍这个标题栏就很麻烦了,我们经常用的方法就是写个基类Activity,然后当某个Activity需要这个统一的标题栏…

我记不住的getopt_long的那些参数和返回值

前言:最近在学习面向Linux系统进行C语言的编程,通过查询man手册和查看网络上的各种文章来获取一点点的知识,重点是看完手册还是一脸懵逼,搞不懂手册里面再说啥,而本篇文章将记录一下学习getopt_long的那些参数和返回值…

NFTScan 正式上线 Viction NFTScan 浏览器和 NFT API 数据服务

2023 年 11 月 16 号,NFTScan 团队正式对外发布了 Viction NFTScan 浏览器,将为 Viction 生态的 NFT 开发者和用户提供简洁高效的 NFT 数据搜索查询服务。NFTScan 作为全球领先的 NFT 数据基础设施服务商,Viction 是继 Bitcoin、Ethereum、BN…

GUI编程--PyQt5--QTreeWidget

文章目录 树型控件展示数据修改节点数据获取所有节点的数据 Qt模组参考 QWidgets QTreeWidget 树型控件展示数据 展示数据的同时,每个节点标注数据类型。 class MyWindow(QWidget):def __init__(self, title):super(MyWindow, self).__init__()self.setWindowTitl…

qt笔记之qml和C++的交互系列(一):初记

code review! —— 杭州 2023-11-16 夜 文章目录 一.qt笔记之qml和C的交互:官方文档阅读理解0.《Overview - QML and C Integration》中给出五种QML与C集成的方法1.Q_PROPERTY:将C类的成员变量暴露给QML2.Q_INVOKABLE()或public slots:将C类…

【面试经典150 | 数学】回文数

文章目录 写在前面Tag题目来源题目解读解题思路方法一:反转一半数字 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本…

遵循开源软件安全路线图

毫无疑问,开源软件对于满足联邦任务所需的开发和创新至关重要,因此其安全性至关重要。 OSS(运营支持系统) 支持联邦政府内的每个关键基础设施部门。 联邦政府认识到这一点,并正在采取措施优先考虑 OSS 安全&#xff…

Android Jetpack的组件介绍,常见组件解析

jetpack组件有哪些 Android Jetpack是一个集成Android应用程序组件的一站式解决方案。它使开发人员能够专注于他们的应用程序的真正创新部分,而不会受到Android平台特定的限制。Jetpack组件可分为四个类别: 架构组件(Architecture Componen…

IDEA无法查看源码是.class,而不是.java解决方案?

问题:在idea中,ctrl鼠标左键进入源码,但是有时候会出现无法查看反编译的源码,如图! 而我们需要的是方法1: mvn dependency:resolve -Dclassifiersources 注意:需要该模块的目录下,不是该文件目…

STM32_SPI总线驱动OLED详细原理讲解

目录 这里写目录标题 第13章 Cortex-M4-SPI总线13.1 SPI总线概述13.1.1 SPI总线介绍13.1.2 SPI总线接口与物理拓扑结构13.1.3 SPI总线通信原理13.1.4 SPI总线数据格式 13.2 IO口模拟SPI操作OLED13.2.1 常见的显示设备13.2.2 OLED显示屏概述13.2.3 OLED特征13.2.4 显示原理13.2.…

stylelint报错at-rule-no-unknown

stylelint报错at-rule-no-unknown stylelint还将各种 sass -rules 标记mixin为include显示未知错误 at-rule-no-unknown ✖ stylelint --fix:Deprecation warnings: 78:1 ✖ Unexpected unknown at-rule "mixin" at-rule-no-unknown 112:3 ✖ Unexpected un…

第四章 串【24王道数据结构笔记】

1.串的基本概念 串,即字符串 (String) 是由零个或多个字符组成的有限序列。一般记为Sa1a2.....an(n>0) S"HelloWorld!" TiPhone 11 Pro Max? 其中,S是串名,单引号括起来的字符序列是串的值;a;可以是字母、数字或其他字符;串中…

DocCMS keyword SQL注入漏洞复现 [附POC]

文章目录 DocCMS keyword SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 DocCMS keyword SQL注入漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测…

idea中误删.iml和.idea文件,如何处理

目录 一、问题描述 二、解决方案 1、理论知识 (1).iml 文件 (2).idea文件 2、操作环境 3、操作步骤 (1)找到【Maven】工具按钮 (2)点图标,重复导入maven项目&am…

Pikachu漏洞练习平台之XXE(XML外部实体注入)

目录 什么是 XML? 什么是DTD? 什么是XEE? 常见payload 什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language); XML 不会做任何事情,而是用来结构化、存储以及传输信息…

promise时效架构升级方案的实施及落地 | 京东物流技术团队

一、项目背景 为什么需要架构升级 promise时效包含两个子系统:内核时效计算系统(系统核心是时效计算)和组件化时效系统(系统核心是复杂业务处理以及多种时效业务聚合,承接结算下单黄金流程流量)&#xff…

SPASS-参数估计与假设检验

参数估计 点估计 点估计用样本统计量的值直接作为总体参数的估计值。如用样本均值直接作为总体均值的估计值,用样本方差直接作为总体方差的估计值等。 常用的点估计法 (1)矩估计法 (2)极大似然估计法 (3)稳健估计法 区间估计 因为点估计直接用样本估计值作为总体参数…

苹果MAC安装绿盾出现问题,安装时没有出现填服务器地址的页面,现在更改不了也卸载不了绿盾 怎么处理?

环境: Mac mini M1 Mac os 11.0 绿盾v6.5 问题描述: 苹果MAC安装绿盾出现问题,安装时没有出现填服务器地址的页面,现在更改不了也卸载不了绿盾 怎么处理? 解决方案: 大部分企业是Windows和Mac终端混合使用,在进行文档加密管理时通常会遇到不兼容的现象,而为了统一…

Ubuntu 18.04无网络连接的n种可能办法

文章目录 网络图标消失,Ubuntu无网络连接VMware上Ubuntu18.04,桥接了多个网卡,其中一个用来上网,均设置为静态ip网络桥接链路没有接对路由不对 网络图标消失,Ubuntu无网络连接 sudo service network-manager stop sud…