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登录豆瓣并发帖的方法
Jul 08 Python
Python 递归函数详解及实例
Dec 27 Python
python 使用get_argument获取url query参数
Apr 28 Python
Jupyter中直接显示Matplotlib的图形方法
May 24 Python
如何利用python制作时间戳转换工具详解
Sep 12 Python
Python提取频域特征知识点浅析
Mar 04 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
Apr 01 Python
python将excel转换为csv的代码方法总结
Jul 03 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
Aug 02 Python
基于django ManyToMany 使用的注意事项详解
Aug 09 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
如何教少儿学习Python编程
Jul 10 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 定义404页面的实现代码
2012/11/19 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
php 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
yii添删改查实例
2015/11/16 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
Laravel框架实现即点即改功能的方法分析
2019/10/31 PHP
用javascript自动显示最后更新时间
2007/03/15 Javascript
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
2015/12/03 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
2020/07/13 Javascript
[01:25]DOTA2超级联赛专访iG 将调整状态找回自己
2013/06/05 DOTA
[01:25:38]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第一场 1月19日
2021/03/11 DOTA
使用Python生成XML的方法实例
2017/03/21 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
Python的高阶函数用法实例分析
2019/04/11 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
如何基于python测量代码运行时间
2019/12/25 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
用 Django 开发一个 Python Web API的方法步骤
2020/12/03 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
支行行长竞聘演讲稿
2014/05/15 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL