Python中Subprocess的不同函数解析


Posted in Python onDecember 10, 2019

以前我一直用os.system()处理一些系统管理任务,因为我认为那是运行linux命令最简单的方式.
我们能从Python官方文档里读到应该用subprocess 模块来运行系统命令.subprocess模块允许我们创建子进程,连接他们的输入/输出/错误管道,还有获得返回值。
subprocess模块打算来替代几个过时的模块和函数,比如: os.system, os.spawn*, os.popen*, popen2.*命令。
让我们来看一下subprocess 有哪些不同的函数.

subprocess.call()

执行由参数提供的命令.

我们可以用数组作为参数运行命令,也可以用字符串作为参数运行命令(通过设置参数shell=True)

注意,参数shell默认为False

我们用subprocess.call()来做一个统计磁盘的例子:

subprocess.call(['df', '-h'])

下面的例子把shell设置为True

subprocess.call('du -hs $HOME', shell=True)

注意,python官方文档里对参数shell=True陈述了一个警告:

Invoking the system shell with shell=True can be a security hazard if combined
with untrusted input

现在,我们来看看输入与输出

Input and Output

subprocess 模块能阻止输出,当你不关心标准输出的时候是非常方便的.

它也使你通过一种正确的方式管理输入/输出,有条理地整合python脚本中的的shell命令.

Return Codes

通过subprocess.call的返回值你能够判定命令是否执行成功.
每一个进程退出时都会返回一个状态码,你可以根据这个状态码写一些代码。

stdin, stdout and stderr

在使用subprocess 时,有一个微妙的部分是怎么使用管道把命令连接起来.

管道表明一个新的子管道应该被创建.

默认的设置为None,意味着没有重定向发生

标准错误可以指向标准输出,表明子进程的错误信息会被捕获到和标准输出同一个文件.

subprocess.Popen()

subprocess 模块中基本的进程创建和管理由Popen 类来处理.

subprocess.popen是用来替代os.popen的.

我们来做一些真实的例子,subprocess.Popen需要一个数组作为参数:

import subprocess
p = subprocess.Popen(["echo", "hello world"], stdout=subprocess.PIPE)
print p.communicate()
>>>('hello world
', None)

注意,虽然你可以使用 "shell=True",但并不推荐这样的方式.

如果你知道你只用几个有限的函数,比如Popen和PIPE,你可以单单指定这几个函数:

from subprocess import Popen, PIPE
p1 = Popen(["dmesg"], stdout=PIPE)
print p1.communicate()

Popen.communicate()

communicate()函数返回一个tuple(标准输出和错误).

Popen.communicate() 和进程沟通:发送数据到标准输入.从标准输出和错误读取数据直到遇到结束符.等待进程结束.

输入参数应该是一个字符串,以传递给子进程,如果没有数据的话应该是None.

基本上,当你用 communicate()函数的时候意味着你要执行命令了.

用subprocess写Ping程序

我们先问用户地址,然后用ping请求这个地址.

# Import the module
import subprocess

# Ask the user for input
host = raw_input("Enter a host to ping: ")  

# Set up the echo command and direct the output to a pipe
p1 = subprocess.Popen(['ping', '-c 2', host], stdout=subprocess.PIPE)

# Run the command
output = p1.communicate()[0]

print output

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python3访问sina首页中文的处理方法
Feb 24 Python
Python中处理字符串的相关的len()方法的使用简介
May 19 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
Feb 08 Python
python如何实现内容写在图片上
Mar 23 Python
Atom的python插件和常用插件说明
Jul 08 Python
Django框架的中的setting.py文件说明详解
Oct 15 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
Oct 04 Python
opencv 阈值分割的具体使用
Jul 08 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
Sep 09 Python
selenium学习教程之定位以及切换frame(iframe)
Jan 04 Python
Selenium Webdriver元素定位的八种常用方式(小结)
Jan 13 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 #Python
python 视频逐帧保存为图片的完整实例
Dec 10 #Python
python 实现视频 图像帧提取
Dec 10 #Python
python-视频分帧&多帧合成视频实例
Dec 10 #Python
python实现视频读取和转化图片
Dec 10 #Python
sklearn-SVC实现与类参数详解
Dec 10 #Python
使用pandas 将DataFrame转化成dict
Dec 10 #Python
You might like
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
PHP实现随机发扑克牌
2020/04/22 PHP
一个符号插入器 中用到的js代码
2007/09/04 Javascript
json 入门基础教程 推荐
2009/10/31 Javascript
Javascript 获取链接(url)参数的方法[正则与截取字符串]
2010/02/09 Javascript
js下用层来实现select的title提示属性
2010/02/23 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
jQuery实现的调整表格行tr上下顺序
2016/01/10 Javascript
全屏js头像上传插件源码高清版
2016/03/29 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
Python运算符重载详解及实例代码
2017/03/07 Python
python将字典内容存入mysql实例代码
2018/01/18 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
python pandas 对时间序列文件处理的实例
2018/06/22 Python
python实现linux下抓包并存库功能
2018/07/18 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
python wsgiref源码解析
2021/02/06 Python
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
党课学习思想汇报
2014/01/02 职场文书
外语专业毕业生自荐信
2014/04/14 职场文书
先进工作者事迹材料
2014/12/23 职场文书
幼儿园开学通知
2015/04/24 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
Mysql中存储引擎的区别及比较
2021/06/04 MySQL