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通过websocket与js客户端通信示例分析
Jun 25 Python
有趣的python小程序分享
Dec 05 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
May 25 Python
Python 修改列表中的元素方法
Jun 26 Python
Python函数参数操作详解
Aug 03 Python
Python 中导入csv数据的三种方法
Nov 01 Python
python实现PID算法及测试的例子
Aug 08 Python
简单的Python调度器Schedule详解
Aug 30 Python
使用matlab或python将txt文件转为excel表格
Nov 01 Python
Tensorflow 模型转换 .pb convert to .lite实例
Feb 12 Python
django restframework serializer 增加自定义字段操作
Jul 15 Python
Python制作一个随机抽奖小工具的实现
Jul 07 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使用正则过滤js脚本代码实例
2014/05/10 PHP
php操作mongoDB实例分析
2014/12/29 PHP
理解JavaScript中的事件
2006/09/23 Javascript
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
jQuery判断元素是否是隐藏的代码
2011/04/24 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
javascript实现表单验证
2016/01/29 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
深入理解vue Render函数
2017/07/19 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
Vue 配合eiement动态路由,权限验证的方法
2018/09/26 Javascript
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
js打开word文档预览操作示例【不是下载】
2019/05/23 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
浅谈Python中copy()方法的使用
2015/05/21 Python
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
Python List cmp()知识点总结
2019/02/18 Python
如何使用python切换hosts文件
2020/04/29 Python
联想C++笔试题
2012/06/13 面试题
老公给老婆的道歉信
2014/01/10 职场文书
中文专业求职信
2014/06/20 职场文书
应届生求职信范文
2014/06/30 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
质量负责人岗位职责
2015/02/15 职场文书
岗位聘任报告
2015/03/02 职场文书
幽默导游词开场白
2015/05/29 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书