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使用xmlrpc实例讲解
Dec 17 Python
python批量替换页眉页脚实例代码
Jan 22 Python
pyqt5自定义信号实例解析
Jan 31 Python
对Python中type打开文件的方式介绍
Apr 28 Python
一文了解Python并发编程的工程实现方法
May 31 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
Python使用ElementTree美化XML格式的操作
Mar 06 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
Python实现一个优先级队列的方法
Jul 31 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
May 20 Python
python for循环赋值问题
Jun 03 Python
python 使用pandas读取csv文件的方法
Dec 24 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
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
Javascript 垃圾收集机制介绍理解
2013/05/14 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
js读取被点击次数的简单实例(从数据库中读取)
2014/03/07 Javascript
JavaScript页面模板库handlebars的简单用法
2015/03/02 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
javascript 小数乘法结果错误的处理方法
2016/07/28 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
遗传算法之Python实现代码
2017/10/10 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
python编程的核心知识点总结
2021/02/08 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
会计找工作求职信范文
2013/12/09 职场文书
户外婚礼策划方案
2014/02/08 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
创业计划书之少年玩具店
2019/09/05 职场文书
vue2实现provide inject传递响应式
2021/05/21 Vue.js
Go语言实现Snowflake雪花算法
2021/06/08 Golang
基于Go语言构建RESTful API服务
2021/07/25 Golang
Java实现房屋出租系统详解
2021/10/05 Java/Android