3.3Python之subprocess模块

Python之subprocess模块 subprocess模块是Python中用于启动和管理子进程的一个强大工具,替代了旧有的os.system和os.spawn系列函数。通过这个模块,您可以从Python脚本中执行系统命令和其他可执行程序,并与之进行交互。在Python的subprocess模块中,有一些旧的API函数,比如call()、check_call()和check_output()。这些函数在Python 3.5及更早版本中被广泛使用。 阅读详情

基本概念

从Python2.4开始,Python引入subprocess模块来管理子进程,以取代旧模块的方法。不但可以调用外部的命令作为子进程,而且可以连接到子进程的input/output/error管道,获取相关的返回信息。

subprocess模块

Python的subprocess模块可以实现子进程。该模块只定义了一个类:Popen。可以使用Popen来创建进程,并与进程进行复杂的交互。它的构造函数如下:

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, 
stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None,
 env=None, universal_newlines=False, startupinfo=None, creationflags=0)
  • 参数args:可以是字符串或者序列类型(如:list,元组),用于指定进程的可执行文件及其参数。如果是序列类型,第一个元素通常是可执行文件的路径。也可以显式地使用 execteable参数来指定可执行文件的路径。
  • 参数stdin,stdout,stderr:分别表示程序的标准输入、输出、错误句柄。它们可以是PIPE,文件描述符或文件对象,也可以设置为None,表示从父进程继承。
  • 参数shelll:设置为True,程序将通过shell来执行。
  • 参数env:字典类型,用于指定子进程的环境变量。如果设置为None,表示子进程的环境变量从父进程中继承。

Popen的方法

  • Popen.poll():用于检查子进程是否已经结束。设置并返回returncode属性。
  • Popen.wait():等待子进程结束。设置并返回returncode属性。
  • Popen.communicate(input = None):与子进程交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。commuicate()返回一个元组:(stdoutdata, stderrdata)。注意如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,参数stdin必须设置为PIPE。同理,如果希望从stdout和stderr获取数据,比较将stdout和stderr设置为PIPE。
  • Popep.send_signal(signal):向子进程发送信号。
  • Popen.terminate():停止(stop)子进程。在windows平台下,该方法将调用Windows API TerminateProcess()来结束子进程。
  • Popen.kill():杀死子进程。

subprocess中定义数个创建子进程的函数,这些函数分别以不同的方式创建子进程。

  • subprocess.call():父进程等待子进程完成,返回退出信息(returncode属性)
  • subprocess.check_call():父进程等待子进程完成,返回0。检查退出信息,如果returncode不为0,则举出错误subprocess.calledProcessError,该对象包含了returncode属性。
  • subProcess.check_output():父进程等待子进程完成,返回子进程向标准输出的输出结果。检查退出信息,如果returncode不为0,则举出错误subprocess.calledProcessError,该对象包含了returncode属性。

示例演示

import time, subprocess

if __name__ == '__main__':
    print "start main"
   child = subprocess.Popen(["ping","-c","5","www.csdn.com"])
    print("parent process")
    while True:
        print "parent processing"
        time.sleep(2)

从运行结果看,父进程在开启子进程之后,并没有等待子进程完成,而是直接运行print(“parent process”)。

import time, subprocess
if __name__ == '__main__':
	print "start main"
	child = subprocess.Popen(["ping","-c","5","www.csdn.com"])
	child.wait()
	print("parent process")
	while True:
		print "parent processing"
		time.sleep(2)

从运行结果看,父进程在开启子进程之后等待子进程完成,再运行print(“parent process”)。

Python3全栈之subprocess模块 常用方法实例 call() 执行命令,并返回状态码,状态码0代表命令执行成功,其他的都表示命令执行不成功 >>> ret = subprocess.call(["ls", "-l"], shell=False) total 4 -rw-r--r-- 1 root root 172 May 25 21:21 file.conf >>> ret 0 另一种执行方式... 阅读详情

相关推荐

python3通过subprocess模块调用脚本并和脚本交互

因工作需要,需实现如题所示功能。查阅网上博客,资料,大多都是针对python2的,而且很多地方不明所以,所以自己整理了一下查阅的结果,重新写一篇博客。 预备知识 1、python3的默认字符串类型 Python 2.x 同时支持ASCII和 Unicode字符串,默认情况下是ASCII编码。而 Python 3中这种支持刚好调换:Unicode现在变成了默认类型,而 ASCII 字符串现在称...

齐梦星空 3532

Python模块学习:subprocess模块详解

args: 要执行的shell命令,默认应该是一个字符串序列,如[‘df’, ‘-Th’]或(‘df’, ‘-Th’),也可以是一个字符串,如’df -Th’,但是此时需要把shell参数的值置为True。shell: 如果shell为True,那么指定的命令将通过shell执行。如果我们需要访问某些shell的特性,如管道、文件名通配符、环境变量扩展功能,这将是非常有用的。

Python热爱者的博客 1万+

多电平双向DC/DC直流变换器的工作原理(以三电平为例子)

多电平双向DCDC变换器的工作原理一、所用论文和参考文献1.1 主要是中文的文献二、工作原理和重要概念2.1 飞跨电容的作用2.2 三电平的工作原理1.3 多电平的优点二,一些注意点2.1 电感电流的变化2.2 多飞跨电容 多余三个电平的时候的解释(截图居多) 一、所用论文和参考文献 1.1 主要是中文的文献 用于超级电容储能系统的三电平双向直流变换器及其控制 (期刊) 多电平直流变换器及其控制...

qq_32419593的博客 2万+

python之subprocess模块

Subprocess是一个功能强大的子进程管理模块,可以像Linux 系统中执行shell命令那样fork一个子进程执行外部的命令,subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。可以创建一个Popen类来创建进程和进行复杂的交互。使用subprocess模块的目的是用于替换os.system等一些旧的模块和方法。执行指定的命令,父进程等待子进程完成,并且返回子进程执行的结果 0/1。后,主进程会等待子进程结束再执行下面的语句。首先推荐使用run方法。

专注于Python编程技术的分享与交流,致力于帮助开发者提升编程技能,解决实际问题,探索Python的无限可能。 4046

告别理论纠结!用ADS和Sigrity玩转电源完整性:从PDN阻抗优化到芯片供电仿真全流程

本文详细介绍了如何利用ADS和Sigrity工具进行电源完整性(PI)分析,从PDN阻抗优化到芯片供电仿真的全流程。通过频域、直流和时域分析,工程师可以精确评估电源网络性能,优化设计以避免电压波动和系统失效。文章还提供了ADS和Sigrity PowerDC的实战操作指南,帮助读者掌握现代PI设计的核心技术。

weixin_33749242的博客 310

磁盘I/O %util特别高

磁盘I/O %util特别高

eagle89的专栏 3090

常用模块——subprocess模块

subprocess模块 subprocess主要用于执行系统指令(启动子进程)与os.system 的不同在于 #subprocess可以与这个子进程进行数据交换。 import subprocess #从管道中读取数据 管道就是 两个进程通讯的媒介 cmd = r'dir F:\Python_exe' res = subprocess.Popen(cmd,shell=Tr...

weixin_30267691的博客 784

团队管理中最棘手的6个问题

研发团队的管理棘手问题,大多集中在。

xiaolyuh的专栏 744

python——subprocess模块

args :要执行的命令,必须是个字符串,字符串参数列表。stdin、stdout、stderr:子进程的标准输入 输出 错误 最常用的是subprocess.PIPE。timeout : 设置命令超时。shell : 值为bool,如果参数为ture 将通过操作系统的shell执行命令。

m0_51957299的博客 690

北斗B1频点信号捕获实战:如何应对NH码跳变带来的挑战?

本文深入探讨了北斗B1频点信号捕获中NH码跳变带来的核心挑战。针对NH码以1kHz速率调制导致的相干积分中断和相关峰畸变问题,文章提出并详细解析了一种基于伪码与多普勒频率分离技术的优化捕获方案。该方案通过差分处理消除NH跳变影响,并利用匹配滤波器与FFT分别进行码相位和多普勒频率的快速估计,有效提升了弱信号环境下的捕获灵敏度和稳定性,为北斗接收机设计提供了实用的工程参考。

joy55的博客 535

关于瑞芯微SDK中buildroot的架构分析、配置细节、以及一些使用步骤

摘要:瑞芯微SDK基于Buildroot框架,针对RK3568等芯片提供定制化开发环境。核心目录包括buildroot(配置与编译框架)、kernel(定制内核)和u-boot(引导程序)。开发流程为:1)加载芯片默认配置;2)通过menuconfig定制系统(架构、内核、软件包等);3)可选修改内核配置。关键硬件适配需修改设备树(dts)和分区表(parameter.txt),系统行为通过启动脚本(S90network)调整。最终执行make编译生成可烧录固件。该框架通过配置文件驱动,实现从工具链构建到固

Hyjks的博客 1199

python3 subprocess模块使用

subprocess 模块@(python3)官网说明文档subprocess.call 和 subprocess.check_call 执行命令,返回状态码。 两者唯一的区别在于返回值。执行成功,都返回 0;执行失败,check_call 将raise出来一个CalledProcessError。 import subprocess subprocess.call(['ls', '

热心市民王先生 1万+

Android性能优化之Android Profiler

在移动应用开发中,打造一个流畅、省电且不卡顿的用户体验是至关重要的。然而,随着应用功能的日益复杂,内存泄漏、CPU暴涨、网络卡顿以及电量消耗过快等问题常常化身为隐形杀手,悄悄吞噬着用户体验。为了帮助开发者精准定位并解决这些性能瓶颈,谷歌在Android Studio中集成了一款强大的一站式性能分析工具Android Profiler。Android Profiler作为Android Studio内置的实时数据可视化工具,支持运行在Android 5.0及更高版本的设备上。

xiangzhihong8的专栏 202

Python入门:Python3 subprocess模块全面学习教程

本文详细介绍 Python 标准库中 subprocess 模块的使用,该模块用于创建和管理子进程,能安全灵活地执行外部命令并实现交互,相比 os.system () 等旧方法功能更强、可控性更高。文章从基础到高级展开,先阐述选择该模块的优势,再讲解核心功能,包括用 subprocess.run () 执行命令、处理输入输出与错误;还介绍高级用法,如通过 Popen 类实现后台进程与实时输出、用管道连接多命令。同时提供核心接口速查表,涵盖常用方法、对象属性及参数,给出执行复杂命令、超时控制、跟踪日志等。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 1万+

游戏开发:逻辑与渲染分离技术解析

游戏开发中逻辑与渲染分离的架构设计 本文系统阐述了游戏开发中逻辑与渲染分离的设计原则与实践方法。文章首先定义了核心概念:逻辑层负责游戏规则与状态,渲染层处理视觉表现,二者通过数据模型层进行通信。通过历史回顾,揭示了从早期混合架构到现代分层设计的演变过程。 在技术实现层面,文章详细分析了分离架构的优势:性能优化、流畅度控制、测试便利性、扩展灵活性以及团队协作效率。提供了Unity和Unreal两大引擎的具体实现方案,包括代码示例、分层模型和最佳实践。特别探讨了网络同步、客户端预测、插值处理等关键技术难点。 文

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1060

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

python3模块--subprocess

subprocess模块run函数Run函数是在python3.5之后新增,语法如下subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None)(具体解释参考...

tyrion的博客 1496

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

python3使用subprocess_python3中使用subprocess模块执行外部命令

一.subprocess模块介绍1.subprocess模块可以替代os模块下的os.system和os.popen等操作方法2.subprocess模块在python2和python3上的使用上有一定的区别,本文主要介绍的是在python3.6上的使用3.subprocess模块的作用是执行外部命令(支持同步执行和异步执行),可以返回执行状态码,也可以返回执行内容4.subproces...

weixin_39958137的博客 1447

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python3之subprocess模块

Python3之subprocess模块 一.简介   subprocess最早在2.4版本引入。用来生成子进程,并可以通过管道连接他们的输入/输出/错误,以及获得他们的返回值。 1 2 3 4 5 6 7 # subprocess用来替换多个旧模块和函数 os.system os.spawn* os.popen...

weixin_30794491的博客 201

python3 学习 - 常用模块 re,subprocess

目录 一、re模块 1-1 正则表达式的常用指令 1-1-1 wW、sS、n、t、dD、A、Z 1-1-2 ^、$ - 匹配开头、结尾 1-1-3 重复匹配 - . - * - ? - .* - .*? - + - {n,m} 1-1-4 [ ] - 字符集合 1-1-5 \\ - 斜杠的匹配 1-1-6 () -分组,不改变整体匹配方式,但优先输出分组内部值 1-1-7 fin...

LIN的博客 778

Python3中常用模块-subprocess模块

subprocess 模块允许你生成新的进程,连接它们的输入、输出、错误管道,并且获取它们的返回码。此模块打算代替一些老旧的模块与功能: os.system os.spawn* 1:获取模块帮助文档 # encoding=gbk import subprocess print(subprocess.__doc__) print(dir(subprocess)) for item in dir(subprocess): print(item) print(help(subpro...

ixusy88的博客 1414

python2调用python3模块_python3通过subprocess模块调用脚本并和脚本交互的操作

因工作需要,需实现如题所示功能。查阅网上博客,资料,大多都是针对python2的,而且很多地方不明所以,所以自己整理了一下查阅的结果,重新写一篇博客。预备知识1、python3的默认字符串类型Python 2.x 同时支持ASCII和 Unicode字符串,默认情况下是ASCII编码。而 Python 3中这种支持刚好调换:Unicode现在变成了默认类型,而 ASCII 字符串现在称为 byte...

weixin_39686048的博客 552

[Python3]subprocess模块

subprocess模块 官方推出subprocess模块是为了提供统一的模块来实现对系统命令或脚本的调用。 三种执行命令的方法 subprocess.run() subprocess.call() subprocess.Popen() run()方法 subprocess.run(['df', '-h'], stdout=subprocess.PIPE, stderr=subprocess....

Life Co.,Ltd. 1354

python3使用subprocess_python3 subprocess模块

当我们在执行python程序的时候想要执行系统shell可以使用subprocess,这时可以新起一个进程来执行系统的shell命令,python3常用的有subprocess.run()和subprocess.Popen,两者的区别是前者是调用的后者,相当于是subprocess.run是subprocess.Popen的又一层封装,前者必须要等待子进程运行结束才会返回,python主进程会被阻...

weixin_39958138的博客 622

python3 subprocess模块 capture_output捕获输出

python3 subprocess模块 capture_output捕获输出 import subprocess # 通过capture_output等于True来捕获控制台输出内容,默认为False output = subprocess.run(["ls", "-l", "/"], capture_output=True)

qq_45066978的博客 2927

Python3 subprocess 模块

subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。 使用 subprocess 模块 subprocess 模块首先推荐使用的是它的 run 方法,更高级的用法可以直接使用 Popen 接口。 Popen() 方法 Popen 是 subprocess的核心,子进程的创建和管理都靠它处理。 构造函数: class subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=N

Fitz的博客 483

python3中subprocess模块的使用

前言 python代码有需要从linux、win、类unix上获取终端的输出,这就需要使用到subprocess模块 使用示例 # -*- coding: utf-8 -*- import subprocess import platform def excuteCommand(command): """ 获取命令行输出的信息 """ subp = subprocess.Popen(command, shell=Tr

weixin_42715225的博客 3472
上一篇: wxPython之Event事件(Markdown版本)
下一篇: 3.7Python之解压缩ZIP文件
暮-成-雪
博客等级 码龄12年 5328粉丝 319原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值