Python_subprocess模块
subprocess中,允许生成新的进程,连接到input/output/error管道,并获取他们的返回(状态)码,主要用于替换os.system/os.spawn*几个旧的模块和方法
subprocess模块常用函数:
|
subprocess.run(args,*,stdin=None,input=None, stdout=None,stderr=None, shell=False, timeout=None, check=False,universal_newlines=False) |
python 3.5新增函数,用于执行指定的命令,命令完成后返回一个包含 执行结果的completedProcess类的实例 |
|
stdout,stderr :默认不会捕获命令执行结果的正常输出和错误输出,若我们要获取这些内容,则需传递dubprocess.PIPE获取相应内容 |
|
|
subprocess.call(args,*,stdin=None,stdout=None, stderr=None,shell=False,timeout=None) |
执行指定的命令,返回命令执行状态,在Python3.5过后的版本已经弃用 |
|
subprocess.check_call(args,*,stdin=None,stdout=None, stderr=None,shell=False,timeout=None) |
执行指定的命令,若指定成功则返回状态码,否则抛出异常,等价与subprocess.run(...,check=True) |
| call(),check_call()中stdout/stderr默认会返回命令执行状态码,所以stdout/stderr不适合赋值为subprocess.PIPE | |
|
subprocess.check_output(args,*,stdin=None,stderr=None, shell=False,universal_newlines=False,timeout=None) |
执行指定命令,若执行状态码为0则返回命令执行结果,否则抛出异常 |
| stdout/stderr中函数默认返回命令执行结果,若结果中需捕获错误信息,可执行stderr=subprocess.STDOUT | |
| subprocess.getoutput(cmd) |
接收字符串格式的命令,执行指定命令,获取执行结果,但无法获取命 令执行状态功能类似os.popen(cmd).read() |
| subprocess.getstatusoutput(cmd) | 执行cmd命令,返回一个元组(命令执行状态,命令执行结果输出) |
| args:要执行的shell命令,默认为字符串序列如['df','-Th']或('df','-Th'),为单独字符串时‘df-Th’,须设置shell=True | |
| shell:若shell=True,指定的命令将通过shell执行,或run访问管道,文件名通配符,环境变量等扩展功能时 | |
| check:若check=True,切执行命令的进程以非0状态码退出时,则会抛出calledprocesserror异常,该异常可能会包含参数、退出状态码、stdout/stderr等 | |
| input:该参数是传递给Popen.communicate(),通常该参数的值必须是一个字节序列,若universal_newlines=True,则该值为一个字符串 | |
| universal_newlines:该参数影响输入与输出的数据格式默认为False,stdout/stderr输出字节序列,反之,为字符串序列 | |
注:在Python3.5之后的版本,建议使用subprocess.run()函数来替代subprocess.call()和其他函数来使用subprocess模块的功能使用
实例:

实例:

实例:

1.subprocess.CompletedProcess类
subprocess.run()函数返回值(一个实例)
2. subprocess.Popen类
call()无法获取执行命令的结果,然而可以通过Popen()+管道的使用 (stdout=subprocess.PIPE)获取执行命令执行的结果

subprocess.Popen()的构造函数:
| args | 执行shell命令,可以是字符串也可以是各个参数组成的序列 |
| bufsize | 缓存策略,0表示不缓冲,1表示行缓冲,大于1的数字表示缓冲区太小,负数表示使用系统默认缓存策略 |
| stdin,stdout,stderr | 表示程序的标准输入、输出、错误句柄 |
| preexec_fn | 用于指定一个将在子进程进行之前被调用的可执行对象(在Unix平台下有效) |
| clase_fds | 在Windows平台下,设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道 |
| shell | 用于标识是否使用shell作为执行的程序,shell=True,表示将args作为字符串传递 |
| cwd | 设置子进程当前目录,若cwd!=None,则该函数将会在执行这个子进程之前改变当前工作目录 |
| env | 用于指定子进程的环境变量,若env=None,则子进程的环境变量将从父进程中继承,否则它的值必须是一个映射对象 |
| universal_newlines | True,则该文件对象的stdin,stdout,stderr将会作为文本流被打开,否则他们将会被作为二进制流被打开 |
| startupinfo/creationflags | 只有在Windows下有效,他们将被传递给底层的CreatProcess()函数,用于设置子进程的一些属性,如进程优先级等 |
subprocess.Popen类可调用的方法:
| Popen.poll() | 用于检查子进程(命令)是否已经执行结束,没有结束返回None,结束后返回状态码 |
| Popen.wait(timeout=None) | 等待子进程结束,并返回状态码,若在timeout指定秒数后进程还没有结束,则抛出异常 |
| Popen.communicate(input=None,timeout=None) |
用于与进程进行交互,如发送数据到stdin,或从stdout,stderr读取数据,其中timeout 参数为Python3中才增加的 |
| Popen.send_signal(signal) | 停止该子进程 |
| Popen.kill() | 杀死该子进程 |
实例:

笔记参考于:https://www.cnblogs.com/yyds/p/7288916.html
Python_subprocess模块的更多相关文章
- npm 私有模块的管理使用
你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- ES6模块import细节
写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...
- Python标准模块--ContextManager
1 模块简介 在数年前,Python 2.5 加入了一个非常特殊的关键字,就是with.with语句允许开发者创建上下文管理器.什么是上下文管理器?上下文管理器就是允许你可以自动地开始和结束一些事情. ...
- Python标准模块--Unicode
1 模块简介 Python 3中最大的变化之一就是删除了Unicode类型.在Python 2中,有str类型和unicode类型,例如, Python 2.7.6 (default, Oct 26 ...
- Python标准模块--Iterators和Generators
1 模块简介 当你开始使用Python编程时,你或许已经使用了iterators(迭代器)和generators(生成器),你当时可能并没有意识到.在本篇博文中,我们将会学习迭代器和生成器是什么.当然 ...
- 自己实现一个javascript事件模块
nodejs中的事件模块 nodejs中有一个events模块,用来给别的函数对象提供绑定事件.触发事件的能力.这个别的函数的对象,我把它叫做事件宿主对象(非权威叫法),其原理是把宿主函数的原型链指向 ...
- 理解nodejs模块的scope
描述 原文档地址:https://docs.npmjs.com/misc/scope 所有npm模块都有name,有的模块的name还有scope.scope的命名规则和name差不多,同样不能有ur ...
- nodejs模块发布及命令行程序开发
前置技能 npm工具为nodejs提供了一个模块和管理程序模块依赖的机制,当我们希望把模块贡献出去给他人使用时,可以把我们的程序发布到npm提供的公共仓库中,为了方便模块的管理,npm规定要使用一个叫 ...
随机推荐
- PHP 转义
函数名 释义 介绍 htmlspecialchars 将与.单双引号.大于和小于号化成HTML格式 &转成&"转成"' 转成'<转成<>转成> ...
- 在多任务(RTOS)环境中使用看门狗
最近在SEGGER的博客上看到一篇有关在实时操作系统使用看门狗的文章.从一个失败的太空项目出发,分析了看门狗的作用及使用,自我感觉很有启发,特此翻译此文并推荐给各位同仁.为了阅读方便,有些航天领域名词 ...
- Ubuntu16.04安装Maven3.5.4
本篇教程在示例步骤中使用了以下版本的软件.操作时,请您以实际软件版本为准. 操作系统:Ubuntu 16.04.3 LTS Maven 版本:Apache Maven 3.5.4 JDK 版本:J ...
- ssh: connect to host github.com port 22: Connection timed out
问题描述 $ git clone git@github.com:MaugerWu/MaugerWu.github.io.git Cloning into 'MaugerWu.github.io'... ...
- Confluence 6 为登录失败配置使用验证码
如果你具有 Confluence 管理员的权限,你可以限制 Confluence 登录失败的最大尝试次数.在给予最大登录失败尝试(默认为 3 次)次数后,Confluence 将会在用户进行再次尝试的 ...
- Confluence 6 新 Confluence 安装配置一个数据源连接
如果在你的 Tomcat 中配置了数据源,并且Confluence 设置指南在安装的时候检测到这个配置的时候,配置数据源的选项将会提供给你进行配置.入股你希望使用数据源,请参考下面的配置. 1. 停止 ...
- gnuradio 创建动态库 libftd3xx.so
首先还是创建好模块gr-kcd cd gr-kcd 打开CMakeLists.txt cmake_minimum_required(VERSION 2.6) project(gr-kcd CXX C) ...
- servlet 遇到的奇怪问题
一. servlet URl 连接多了 %09 原因value里面多了个空格 value=" value'; 改成 value="value'; 二.servlet get方法可以 ...
- laravel 视图
在实际开发中,除了 API 路由返回指定格式数据对象外,大部分 Web 路由返回的都是视图,以便实现更加复杂的页面交互,我们在前面已经看到过了视图的定义方式: return view('以.分隔的视图 ...
- bzoj 3129
非常好的一道数学题,考察了大量数论和组合数学的知识 在做本题之前强烈建议先完成下列两个背景知识: ①: bzoj 2142礼物 因为本题的一部分数据需要利用到拓展卢卡斯定理,而礼物是拓展卢卡斯定理的裸 ...