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 16 Python
python里对list中的整数求平均并排序
Sep 12 Python
python获取mp3文件信息的方法
Jun 15 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
Oct 15 Python
python全栈要学什么 python全栈学习路线
Jun 28 Python
python异步编程 使用yield from过程解析
Sep 25 Python
python 爬取古诗文存入mysql数据库的方法
Jan 08 Python
浅谈python之自动化运维(Paramiko)
Jan 31 Python
tensorboard显示空白的解决
Feb 15 Python
Python中常用的高阶函数实例详解
Feb 21 Python
python中数据库like模糊查询方式
Mar 02 Python
Python 实现PS滤镜的旋涡特效
Dec 03 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内存缓存Memcached类实例
2014/12/08 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
基于BootStrap的图片轮播效果展示实例代码
2016/05/23 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
2016/12/21 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
2017/02/20 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
js实现简易ATM功能
2020/10/27 Javascript
web.py在模板中输出美元符号的方法
2014/08/26 Python
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
Python程序员面试题 你必须提前准备!
2018/01/16 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
python随机模块random使用方法详解
2020/02/14 Python
python多进程使用函数封装实例
2020/05/02 Python
Python实现EM算法实例代码
2020/10/04 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
三星印度官网:Samsung印度
2019/08/03 全球购物
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
个人自我鉴定怎么写
2013/10/28 职场文书
网络教育自我鉴定
2013/11/01 职场文书
自我评价优缺点范文
2015/03/11 职场文书
2015年公务员工作总结
2015/04/24 职场文书
52条SQL语句教你性能优化
2021/05/25 MySQL