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 相关文章推荐
在Django的上下文中设置变量的方法
Jul 20 Python
python对json的相关操作实例详解
Jan 04 Python
python安装Scrapy图文教程
Aug 14 Python
Python爬虫框架Scrapy基本用法入门教程
Jul 26 Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 Python
python 提取tuple类型值中json格式的key值方法
Dec 31 Python
python调用webservice接口的实现
Jul 12 Python
python用类实现文章敏感词的过滤方法示例
Oct 27 Python
python实现拉普拉斯特征图降维示例
Nov 25 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
Apr 19 Python
通过实例简单了解python yield使用方法
Aug 06 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 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调用MySQL的存储过程的实现代码
2008/08/12 PHP
php学习之数据类型之间的转换代码
2011/05/29 PHP
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
深入理解JavaScript是如何实现继承的
2013/12/12 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖放商品放置购物车
2015/11/30 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
Sortable.js拖拽排序使用方法解析
2016/11/04 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
详解Python开发中如何使用Hook技巧
2017/11/01 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
2019/08/19 Python
Python 字符串、列表、元组的截取与切片操作示例
2019/09/17 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
python实现图像拼接
2020/03/05 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
毕业生自荐书
2014/02/02 职场文书
质量负责人任命书
2014/06/06 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python