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中多线程thread与threading的实现方法
Aug 18 Python
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
python遍历类中所有成员的方法
Mar 18 Python
浅析Python的web.py框架中url的设定方法
Jul 11 Python
网站渗透常用Python小脚本查询同ip网站
May 08 Python
python将每个单词按空格分开并保存到文件中
Mar 19 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
Sep 18 Python
python调用matplotlib模块绘制柱状图
Oct 18 Python
查看端口并杀进程python脚本代码
Dec 17 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
Jan 03 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
Apr 27 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的错误信息
2006/10/09 PHP
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
深入分析php之面向对象
2013/05/15 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
2016/09/29 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
Vue动态生成表格的行和列
2019/07/18 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
pycharm 使用心得(四)显示行号
2014/06/05 Python
详解Python爬虫的基本写法
2016/01/08 Python
win与linux系统中python requests 安装
2016/12/04 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
考试不及格检讨书
2014/01/09 职场文书
食堂个人先进事迹
2014/01/22 职场文书
公司周年庆典策划方案
2014/05/17 职场文书
义诊活动总结
2015/02/04 职场文书
支教个人总结
2015/03/04 职场文书
债务纠纷起诉书
2015/05/20 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书
千万级用户系统SQL调优实战分享
2022/03/03 MySQL