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 Pygame的具体使用讲解
Nov 03 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
Nov 21 Python
python版学生管理系统
Jan 10 Python
30秒轻松实现TensorFlow物体检测
Mar 14 Python
解决nohup重定向python输出到文件不成功的问题
May 11 Python
python实现自主查询实时天气
Jun 22 Python
pandas中apply和transform方法的性能比较及区别介绍
Oct 30 Python
手把手教你如何安装Pycharm(详细图文教程)
Nov 28 Python
python实现按首字母分类查找功能
Oct 31 Python
用python3读取python2的pickle数据方式
Dec 25 Python
django在保存图像的同时压缩图像示例代码详解
Feb 11 Python
Python 多线程共享变量的实现示例
Apr 17 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
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
javascript设计模式 接口介绍
2012/07/24 Javascript
JSON语法五大要素图文介绍
2012/12/04 Javascript
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
javascript高级编程之函数表达式 递归和闭包函数
2015/11/29 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
js实现图片局部放大效果详解
2019/03/18 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
javascript实现简易计算器功能
2020/09/23 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
Python numpy 常用函数总结
2017/12/07 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
python 字典操作提取key,value的方法
2019/06/26 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
python+opencv边缘提取与各函数参数解析
2020/03/09 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
车间工艺员岗位职责
2013/12/09 职场文书
医药代表个人求职信范本
2013/12/19 职场文书
职业生涯规划怎么写
2013/12/29 职场文书
拓展培训心得体会
2014/01/04 职场文书
校园十大歌手策划书
2014/02/01 职场文书
科技之星事迹材料
2014/06/02 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
安全演讲稿开场白
2014/08/25 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB
HttpClient实现文件上传功能
2022/08/14 Java/Android