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微信好友数据分析详解
Nov 19 Python
PyCharm设置每行最大长度限制的方法
Jan 16 Python
python pytest进阶之xunit fixture详解
Jun 27 Python
Python3 执行Linux Bash命令的方法
Jul 12 Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 Python
python中删除某个元素的方法解析
Nov 05 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
Dec 04 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
Dec 27 Python
Python版中国省市经纬度
Feb 11 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 Python
Python学习工具jupyter notebook安装及用法解析
Oct 23 Python
python操作xlsx格式文件并读取
Jun 02 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中文件缓存转内存缓存的方法
2011/12/06 PHP
php网上商城购物车设计代码分享
2012/02/15 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
可自定义速度的js图片无缝滚动示例分享
2014/01/20 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
2016/12/26 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
2017/03/30 Javascript
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
js实现左右两侧浮动广告
2018/07/09 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
Python入门篇之面向对象
2014/10/20 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
如何使用Python 打印各种三角形
2019/06/28 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
Visual-Click葡萄牙:欧洲领先的在线眼镜商
2020/02/17 全球购物
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
Ooni英国官网:披萨烤箱
2020/05/31 全球购物
酒店员工培训方案
2014/06/02 职场文书
岗位说明书标准范本
2014/07/30 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
2015年考研复习计划
2015/01/19 职场文书
银行招聘自荐信
2015/03/06 职场文书
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers