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 Socket传输文件示例
Jan 16 Python
Python排序搜索基本算法之希尔排序实例分析
Dec 09 Python
Python实现注册、登录小程序功能
Sep 21 Python
Python高斯消除矩阵
Jan 02 Python
Python 保存矩阵为Excel的实现方法
Jan 28 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
django自带调试服务器的使用详解
Aug 29 Python
Python实现ATM系统
Feb 17 Python
Keras:Unet网络实现多类语义分割方式
Jun 11 Python
如何卸载python插件
Jul 08 Python
用python获取txt文件中关键字的数量
Dec 24 Python
Python数据分析入门之数据读取与存储
May 13 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
2015/06/29 PHP
php curl常用的5个经典例子
2017/01/20 PHP
用jquery来定位
2007/02/20 Javascript
学习YUI.Ext 第四天--对话框Dialog的使用
2007/03/10 Javascript
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
JavaScript中立即执行函数实例详解
2017/11/04 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
2019/05/07 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
用Pygal绘制直方图代码示例
2017/12/07 Python
Python程序运行原理图文解析
2018/02/10 Python
Scrapy框架使用的基本知识
2018/10/21 Python
set在python里的含义和用法
2019/06/24 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
使用Pyhton 分析酒店针孔摄像头
2020/03/04 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
优秀党员转正的自我评价
2013/10/06 职场文书
上课玩手机检讨书
2014/02/08 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
研究生个人学年总结
2015/02/14 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
pytorch查看网络参数显存占用量等操作
2021/05/12 Python