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运行效率的方法之间的对比
Apr 03 Python
python字典键值对的添加和遍历方法
Sep 11 Python
python的Crypto模块实现AES加密实例代码
Jan 22 Python
Python微信公众号开发平台
Jan 25 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
May 08 Python
利用Python实现微信找房机器人实例教程
Mar 10 Python
python实现beta分布概率密度函数的方法
Jul 08 Python
django搭建项目配置环境和创建表过程详解
Jul 22 Python
Python中sorted()排序与字母大小写的问题
Jan 14 Python
用python写爬虫简单吗
Jul 28 Python
python多线程和多进程关系详解
Dec 14 Python
Python-OpenCV实现图像缺陷检测的实例
Jun 11 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/06/06 PHP
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
PHP 使用redis简单示例分享
2015/03/05 PHP
php使用Imagick生成图片的方法
2015/07/31 PHP
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
javascript删除option选项的多种方法总结
2013/11/22 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
[02:38]DOTA2英雄基础教程 噬魂鬼
2014/01/03 DOTA
[01:20:38]完美世界DOTA2联赛 GXR vs IO 第一场 11.07
2020/11/09 DOTA
Python list操作用法总结
2015/11/10 Python
python验证码识别实例代码
2018/02/03 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
PHP面试题集
2016/12/18 面试题
英语教师岗位职责
2014/03/16 职场文书
心理学专业求职信
2014/06/16 职场文书
大学生安全责任书
2014/07/25 职场文书
企业趣味活动方案
2014/08/21 职场文书
公证委托书标准格式
2014/09/11 职场文书
公务员个人年终总结
2015/02/12 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
Python合并pdf文件的工具
2021/07/01 Python
Python编程编写完善的命令行工具
2021/09/15 Python