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

一、简介

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')

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux_/proc目录_查看处理器的信息/proc/cpuinfo

1、cat /proc/cpuinfo_查看/proc/cpuinfo文件的内容 可以看到板卡有4个处理器,剩下的信息emmm...... 2、BogoMIPS_反映CPU运算速率 MIPS是millions of instructions per second(百万条指令每秒)的缩写,其代表CPU的运算速率。 BogoMIPS是Linux大致计算…

Python开源项目GPEN——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践

无论是自己、家人或是朋友、客户的照片,免不了有些是黑白的、被污损的、模糊的,总想着修复一下。作为一个程序员 或者 程序员的家属,当然都有责任满足他们的需求、实现他们的想法。除了这个,学习了本文的成果,或许你还…

springcloud失物招领网站源码

开发技术: jdk1.8,mysql5.7,idea,nodejs,vscode springcloud springboot mybatis vue elementui 功能介绍: 用户端: 登录注册 首页显示搜索失物,轮播图,最新发布的…

OpenCV快速入门:基本操作

文章目录 1. 像素操作1.1 像素统计1.2 两个图像之间的操作1.2.1 图像加法操作1.2.3 图像加权混合 1.3 二值化1.4 LUT(查找表)1.4.1 查找表原理1.4.2 代码演示 2 图像变换2.1 旋转操作2.1.1 旋转的基本原理2.1.2 代码实现 2.2 缩放操作2.3 平移操作2.3.1 …

基于SSM的宠物综合服务平台的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

Topaz Video AI:引领视频质量革命,让您的内容焕发新生

随着数字媒体的日益普及,视频质量的重要性日益凸显。无论是个人用户还是专业团队,都需要确保他们的视频内容具有最佳的质量。但是,由于各种原因,如设备限制、环境干扰等,往往导致视频质量不尽如人意。这时,…

【ISP图像处理】Demosaic去马赛克概念介绍以及相关方法整理

1. 基本定义 使用彩色滤光器阵列(CFA)的数码相机需要一个去马赛克程序来形成完整的RGB图像。一般的相机传感器都是采用彩色滤光片阵列(CFA)放置在光感测单元上,在每个像素处仅捕获三种原色成分中的一种。 去马赛克方法主要关注于复原非常规区域,比如边缘…

mybatis之主键返回

1.在mybatis的xml中加入 <insert id"insertUser" keyProperty"id" useGeneratedKeys"true" parameterType"com.UserAndOrder"> insert into Tuser(userName,passWord) values (#{userName},#{passWord} ) </insert&…

内存管理中的一级指针和二级指针

目录 写在前面指针和内存管理正常使用类型转换中的使用分割内存块建立链接 新知识收获(void *)0和null(void*&#xff09;和 * 写在前面 关于指针的内容&#xff0c;在本科的时候有学过&#xff0c;但是仅限于学过&#xff0c;使用起来那是跟没学过一样&#xff0c;最近读操作…

HashMap

JDK1.7: ArrayList 内部是数组结构 LinkeList内部是链表结构 TreeMap 是二叉树结构 HashMap 是数组链表 读取(put)慢 会读取所有的key 确定有没有重复,通过hash优化 Hash碰撞时两个不同的Key 取模时 得到了一样的key 通过链表进行存放 初始大小 1 << 4 ,16 ------和满载…

text/xml和application/xml

困惑 在http消息中&#xff0c;同样是传送xml信息&#xff0c;有的时候看到Content-Type的值是text/xml&#xff0c;有的时候值是application/xml&#xff0c;感到困惑。 例如&#xff0c;用Postman发送http消息给Tomcat中的基于JAX-WS的 web服务&#xff1a; 请求中传送了xm…

YOLOv8改进 | ICLR 2022 |ODConv附修改后的C2f、Bottleneck模块代码

论文地址&#xff1a;论文地址点击即可跳转阅读 代码地址&#xff1a;文末提供复制粘贴的代码块 一、本文介绍 这篇文章给大家带来的是发表于2022年ICLR的ODConv(Omni-Dimensional Dynamic Convolution)中文名字全维度动态卷积&#xff0c;该卷积可以即插即用&#xff0c;可…

Ubuntu22.04离线安装uwsgi问题记录

GCC4.8安装 1、报错信息1&#xff1a; 由于缺少gcc4.8环境导致的无法安装uwsgi 解决方案&#xff1a; 离线安装GCC4.8环境, GCC4.8.5离线安装步骤如下&#xff1a; 1、下载gcc的离线安装包及其依赖包&#xff0c;链接如下&#xff1a; https://download.csdn.net/download/…

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

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

Google codelab WebGPU入门教程源码<2> - 绘制几何形状(源码)

对应的教程文章: https://codelabs.developers.google.com/your-first-webgpu-app?hlzh-cn#3 源码执行效果: 对应的教程源码: 此处源码和教程本身提供的部分代码可能存在一点差异。 class Color4 {r: number;g: number;b: number;a: number;constructor(pr 1.0, pg 1.0, …

C++初阶 类和对象(下)

目录 一、拷贝构造函数 1.1 什么是拷贝构造函数&#xff1f; 1.2 为什么得是引用&#xff1f; 1.3 使用拷贝构造函数 1.4 拷贝构造函数有什么用&#xff1f; 二、运算符重载 2.1 什么是运算符重载&#xff1f; 2.2 尝试前须知 2.3 常见运算符重载 2.3.1运算符重载 …

树莓派通过网线连接电脑(校园网也能连接),实现SSH连接

前言 之前通过串口登入树莓派&#xff0c;太麻烦&#xff0c;通过网络登入树莓派&#xff0c;学校校园网又连接不了&#xff0c;想起来可以使用网线连接树莓派和电脑。 目录 树莓派通过网线连接电脑思路分析 树莓派通过网线连接电脑实现 1.硬件需求 2.打开Windows的网络 …

12.Oracle的索引

Oracle11g的索引 一、什么是索引二、索引的分类三、索引的语法四、分析索引四、索引的作用及使用场景 一、什么是索引 在Oracle数据库中&#xff0c;索引是一种特殊的数据结构&#xff0c;用于提高查询性能和加速数据检索。索引存储了表中某列的值和对应的行指针&#xff0c;这…

2023.11.15 关于 Spring Boot 配置文件

目录 引言 Spring Boot 配置文件 properties 配置文件说明 基本语法 读取配置文件 优点 缺点 yml 配置文件说明 基本语法 读取配置文件 yml 配置不同数据数据类型及 null 字符串 加单双引号的区别 yml 配置 列表&#xff08;List&#xff09; 和 映射&#xff08;…

WordPress丸子小程序问题常见解决方案

WordPress丸子小程序问题常见解决方案 下载uniapp&#xff0c;导入项目。修改下图域名为自己的WP博客地址。&#xff08;如下图&#xff09; 发行微信小程序&#xff0c;如果显示不是项目所有者&#xff0c;请重新获取。 重新发行微信小程序&#xff0c;请打开微信开发者工具端…