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中用sleep()方法操作时间的教程
May 22 Python
python中set常用操作汇总
Jun 30 Python
python 异常处理总结
Oct 18 Python
利用Python暴力破解zip文件口令的方法详解
Dec 21 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
Apr 17 Python
python游戏地图最短路径求解
Jan 16 Python
python统计中文字符数量的两种方法
Jan 31 Python
Django 数据库同步操作技巧详解
Jul 19 Python
Python实现名片管理系统
Feb 14 Python
如何使用 Python 读取文件和照片的创建日期
Sep 05 Python
Django xadmin安装及使用详解
Oct 26 Python
python如何利用cv2模块读取显示保存图片
Jun 04 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
Access数据库导入Mysql的方法之一
2006/10/09 PHP
php缓存技术详细总结
2013/08/07 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
取键盘键位ASCII码的网页
2007/07/30 Javascript
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
vue写h5页面的方法总结
2019/02/12 Javascript
在Web关闭页面时发送Ajax请求的实现方法
2019/03/07 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
[03:42]2014DOTA2西雅图国际邀请赛7月9日TOPPLAY
2014/07/09 DOTA
python实现的一个火车票转让信息采集器
2014/07/09 Python
python类的继承实例详解
2017/03/30 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
深入理解Python爬虫代理池服务
2018/02/28 Python
python增加图像对比度的方法
2019/07/12 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
解决TensorFlow训练模型及保存数量限制的问题
2021/03/03 Python
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
荷兰照明、灯具和配件网上商店:dmlights
2019/08/25 全球购物
入党积极分子思想汇报范文
2014/01/05 职场文书
《木笛》教学反思
2014/03/01 职场文书
党员公开承诺书和承诺事项
2014/03/25 职场文书
美容院合作经营协议书
2014/10/10 职场文书