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利用hook技术破解https的实例代码
Mar 25 Python
Python中暂存上传图片的方法
Feb 18 Python
python之PyMongo使用总结
May 26 Python
对python中类的继承与方法重写介绍
Jan 20 Python
python利用跳板机ssh远程连接redis的方法
Feb 19 Python
Python3标准库总结
Feb 19 Python
Python TestCase中的断言方法介绍
May 02 Python
python取余运算符知识点详解
Jun 27 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
python logging添加filter教程
Dec 24 Python
python和C++共享内存传输图像的示例
Oct 27 Python
七个非常实用的Python工具包总结
Jun 15 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 表单验证实现代码
2009/03/10 PHP
PHP 批量删除数据的方法分析
2009/10/30 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
JS option location 页面跳转实现代码
2008/12/27 Javascript
用js实现计算加载页面所用的时间
2010/04/02 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
js判断是否为空和typeof的用法(详解)
2016/10/07 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
2018/09/25 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
react用Redux中央仓库实现一个todolist
2019/09/29 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
Python实现简单HTML表格解析的方法
2015/06/15 Python
Go语言基于Socket编写服务器端与客户端通信的实例
2016/02/19 Python
浅谈python新手中常见的疑惑及解答
2016/06/14 Python
Pythony运维入门之Socket网络编程详解
2019/04/15 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
利用python汇总统计多张Excel
2020/09/22 Python
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
大学毕业生通用求职信
2013/09/28 职场文书
2014年干部作风建设总结
2014/10/23 职场文书
党员年度个人总结
2015/02/14 职场文书
党风廉正建设个人工作总结
2015/03/06 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
赡养老人协议书范本
2015/08/06 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript
一些让Python代码简洁的实用技巧总结
2021/08/23 Python
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis