Python subprocess库的使用详解


Posted in Python onOctober 26, 2018

介绍

使用subprocess模块的目的是用于替换os.system等一些旧的模块和方法。

运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序。

subprocess包中定义有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所以我们可以根据需要来从中选取一个使用。另外subprocess还提供了一些管理标准流(standard stream)和管道(pipe)的工具,从而在进程间使用文本通信。

导入模块

>>> import subprocess

命令执行call()

执行由参数提供的命令,把数组作为参数运行命令。其功能类似于os.system(cmd)。

>>> subprocess.call(['ls','-l')

其中参数shell默认为False。

在shell设置为True时,可以直接传字符串:

>>> subprocess.call('ls -l',shell=True)

获得返回结果check_output()

call()是不返回显示的结果的,可以使用check_ouput()来获得返回的结果:

>>> result = subprocess.check_output(['ls','-l'],shell=True)
>>> result.decode('utf-8')

进程创建和管理Popen类

subprocess.popen代替os.popen。可以创建一个Popen类来创建进程和进行复杂的交互。

创建不等待的子进程

import subprocess

child = subprocess.Popen(['ping','-c','4','www.baidu.com'])
print('Finished')

添加子进程等待

import subprocess

child = subprocess.Popen(['ping','-c','4','www.baidu.com'])
child.wait() # 等待子进程结束
print('Finished')

添加了wait()后,主进程会等待子进程结束再执行下面的语句。

子进程文本流控制

标准输出重定向:

import subprocess

child = subprocess.Popen(['ls','-l'],stdout=subprocess.PIPE)
#将标准输出定向输出到subprocess.PIPE
print(child.stdout.read())

使用stdin与其配合使用:

import subprocess

child1 = subprocess.Popen(['cat','/etc/passwd'],stdout=subprocess.PIPE)
child2 = subprocess.Popen(['grep','root'],stdin=child1.stdout,stdout=subprocess.PIPE)

print child2.communicate()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的pack和unpack的使用
Mar 12 Python
每天迁移MySQL历史数据到历史库Python脚本
Apr 13 Python
python清除字符串前后空格函数的方法
Oct 21 Python
python list格式数据excel导出方法
Oct 31 Python
python的常用模块之collections模块详解
Dec 06 Python
Python简单过滤字母和数字的方法小结
Jan 09 Python
Python+PyQT5的子线程更新UI界面的实例
Jun 14 Python
python里dict变成list实例方法
Jun 26 Python
用Python实现最速下降法求极值的方法
Jul 10 Python
pandas通过字典生成dataframe的方法步骤
Jul 23 Python
简单了解pytest测试框架setup和tearDown
Apr 14 Python
Python docx库删除复制paragraph及行高设置图片插入示例
Jul 23 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
Oct 26 #Python
Python分割指定页数的pdf文件方法
Oct 26 #Python
python 将json数据提取转化为txt的方法
Oct 26 #Python
python读取TXT每行,并存到LIST中的方法
Oct 26 #Python
python 循环读取txt文档 并转换成csv的方法
Oct 26 #Python
使用python Fabric动态修改远程机器hosts的方法
Oct 26 #Python
python 处理string到hex脚本的方法
Oct 26 #Python
You might like
让PHP更快的提供文件下载的代码
2012/06/13 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
php 常用的系统函数
2017/02/07 PHP
深入理解PHP中mt_rand()随机数的安全
2017/10/12 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
JavaScript实现网页对象拖放功能的方法
2015/04/15 Javascript
javascript实现密码验证
2015/11/10 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
2017/03/03 Javascript
Bootstrap fileinput文件上传组件使用详解
2017/06/06 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
jQuery实现消息弹出框效果
2019/12/10 jQuery
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
python如何在循环引用中管理内存
2018/03/20 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
浅谈django 重载str 方法
2020/05/19 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
2013届毕业生求职信范文
2013/11/20 职场文书
矿泉水广告词
2014/03/20 职场文书
学生请假条
2014/04/11 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
武夷山导游词
2015/02/03 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python