Python的并发并行[3] -> 进程[0] -> subprocess 模块
subprocess 模块
0 模块描述 / Module Description
From subprocess module:
"""Subprocesses with accessible I/O streams This module allows you to spawn processes, connect to their
input/output/error pipes, and obtain their return codes. For a complete description of this module see the Python documentation. Main API
========
run(...): Runs a command, waits for it to complete, then returns a
CompletedProcess instance.
Popen(...): A class for flexibly executing a command in a new process Constants
---------
DEVNULL: Special value that indicates that os.devnull should be used
PIPE: Special value that indicates a pipe should be created
STDOUT: Special value that indicates that stderr should go to stdout Older API
=========
call(...): Runs a command, waits for it to complete, then returns
the return code.
check_call(...): Same as call() but raises CalledProcessError()
if return code is not 0
check_output(...): Same as check_call() but returns the contents of
stdout instead of a return code
getoutput(...): Runs a command in the shell, waits for it to complete,
then returns the output
getstatusoutput(...): Runs a command in the shell, waits for it to complete,
then returns a (status, output) tuple
"""
1 常量 / Constants
1.0 PIPE常量
常量数值: PIPE = -1
常量功能:一个特殊数值,表示需要创建一个pipe。将这个变量传给stdout/stdin/stderr可以实现将子进程输出传给父进程
1.1 STDOUT常量
常量数值: STDOUT = -2
常量功能:一个特殊数值,表示stderr需要转入stdout中
1.2 DEVNULL常量
常量数值: DEVNULL = -3
常量功能:一个特殊数值,表示需要使用os.devnull
2 函数 / Function
2.0 run()函数
函数调用: re = subprocess.run(*popenargs, input=None, timeout=None, check=False)
函数功能:创建新进程运行程序,返回新进程的CompletedProcess实例
传入参数: *popenargs, input, timeout, check
*popenargs: list类型,调用新进程时使用的输入
input: obj类型,用于设置新进程的输入
timeout: int类型,设置超时时间限制,若进程用时太久,会引发TimeoutExpired
check: bool类型,检测程序退出,若退出码不是0,引发CalledProecssError
返回参数: re
re: instance类型,返回的CompletedProcess实例
2.1 call()函数
函数调用: re = subprocess.call(*popenargs, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)
函数功能:创建新进程运行程序,输入输出绑定到父进程,返回新进程退出码
传入参数: *popenargs, stdin, stdout, stderr, shell, timeout
*popenargs: list类型,调用新进程时使用的输入
stdin: obj类型,用于设置新进程的输入
stdout: obj类型,用于设置新进程的输出
stderr: obj类型,用于设置新进程的错误信息
shell: bool类型,设置是否使用中间shell来执行(可以使用shell相关变量等)
timeout: int类型,设置超时时间限制
返回参数: re
re: int类型,返回的退出码,0为正常退出
Note: 对于新进程的输入参数,以list形式传入,例如命令python test.py,则传入参数列表[‘python’, ‘test.py’]。
2.2 check_call()函数
函数调用: re = subprocess.check_call(*popenargs, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)
函数功能:创建新进程运行程序,输入输出绑定到父进程,正常退出返回退出码0,否则引发一个subprocess.CalledProcessError
传入参数: *popenargs, stdin, stdout, stderr, shell, timeout
*popenargs: list类型,调用新进程时使用的输入
stdin: obj类型,用于设置新进程的输入
stdout: obj类型,用于设置新进程的输出
stderr: obj类型,用于设置新进程的错误信息
shell: bool类型,设置是否使用中间shell来执行(可以使用shell相关变量等)
timeout: int类型,设置超时时间限制
返回参数: re
re: int类型,返回的退出码,0为正常退出
2.3 getstatusoutput()函数
函数调用: re = subprocess.getstatusoutput(cmd)
函数功能:创建新进程运行程序,元组形式返回新进程退出码和输出
传入参数: cmd
cmd: list类型,调用新进程时使用的输入,[‘python’, ‘test.py’]形式
返回参数: re
re: tuple类型,返回的元组,包含退出码和输出
2.4 getoutput()函数
函数调用: re = subprocess.getoutput(cmd)
函数功能:创建新进程运行程序,字符串形式返回新进程的输出
传入参数: cmd
cmd: list类型,调用新进程时使用的输入,[‘python’, ‘test.py’]形式
返回参数: re
re: str类型,返回的子进程输出
2.5 check_output()函数
函数调用: re = subprocess.check_output(*popenargs, input=None, stdin=None,
stdout=None, stderr=None, shell=False, universal_newlines=False, timeout=None)
函数功能:创建新进程运行程序,返回新进程的输出
传入参数: *popenargs, input, stdin, stdout, stderr, shell, universal_newlines, timeout
*popenargs: list类型,调用新进程时使用的输入
Input: byte/str类型,一个额外可用的输入,允许传入一个字(b)符串给stdin
stdin: obj类型,用于设置新进程的输入
stdout: obj类型,用于设置新进程的输出
stderr: obj类型,用于设置新进程的错误信息
shell: bool类型,设置是否使用中间shell来执行(可以使用shell相关变量等)
universal_newlines: bool类型,设置输入输出的格式,False为byte,True为str
timeout: int类型,设置超时时间限制
返回参数: re
re: byte/str类型,返回的输出结果
3 类 / Class
3.1 Popen类
类实例化:prcs = subprocess.Popen(args, stdin=None, stdout=None, stderr=None, […])
类的功能:用于生成一个新进程执行子程序
传入参数: args
args: list类型,新进程执行的输入
stdin: obj/int类型,用于设置新进程的输入
stdout: obj/int类型,用于设置新进程的输出
stderr: obj/int类型,用于设置新进程的错误信息
返回参数: prcs
prcs: instance类型,生成的新进程实例
Note: 对于新进程的输入参数args,以list形式传入,例如命令python test.py,则传入参数列表[‘python’, ‘test.py’]。
3.1.1 pid属性
属性调用: pid = prcs.pid
属性功能: 返回子进程的pid信息
属性参数: pid
pid: int类型,子进程的pid
3.1.2 communicate()方法
函数调用: re = prcs.communicate(input=None, timeout=None)
函数功能:用于进程之间通信,发送数据到stdin,并从stdout和stderr读取数据
传入参数: input, timeout
input: byte/str类型,一个额外可用的输入,允许传入一个字(b)符串给stdin
timeout: int类型,设置超时时间限制
返回参数: re
re: tuple类型,返回的输出结果,(stdout, stderr)
3.1.3 poll()方法
函数调用: re = prcs.poll()
函数功能:用于检测子进程是否结束
传入参数: 无
返回参数: re
re: int类型,返回的结果,为1则子进程已结束
3.2 CompletedProcess类
类实例化:re = subprocess.run() / CompletedProcess(args, returncode, stdout=None, stderr=None)
类的功能:一个已经完成运行的子进程,通常为调用subprocess.run()函数时返回生成
传入参数: args, returncode, stdout, stderr
args: list类型,新进程执行的输入
returncode: int类型,子进程的退出码
stdout: obj/NoneType类型,子进程的输出,如果没获取到则为None
stderr: obj/NoneType类型,子进程的错误信息,如果没获取到则为None
返回参数: re
re: instance类型,生成的已结束子进程实例
Python的并发并行[3] -> 进程[0] -> subprocess 模块的更多相关文章
- Python的并发并行[1] -> 线程[0] -> threading 模块
threading模块 / threading Module 1 常量 / Constants Pass 2 函数 / Function 2.1 setprofile()函数 函数调用: thread ...
- Python的并发并行[2] -> 队列[0] -> queue 模块
queue 模块 / queue Module 1 常量 / Constants Pass 2 函数 / Function Pass 3 类 / Class 3.1 Queue类 类实例化:queue ...
- Python的并发并行[3] -> 进程[1] -> 多进程的基本使用
多进程的基本使用 1 subprocess 常用函数示例 首先定义一个子进程调用的程序,用于打印一个输出语句,并获取命令行参数 import sys print('Called_Function.py ...
- Python之路(第三十七篇)并发编程:进程、multiprocess模块、创建进程方式、join()、守护进程
一.在python程序中的进程操作 之前已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起来的python程序 ...
- 网络基础之 并发编程之进程,多路复用,multiprocess模块
并发 1. 背景知识 2. 什么是进程 3. 进程调度 4. 并发与并行 5 同步\异步\阻塞\非阻塞(重点) 6.multiprocess模块 7.僵尸进程与孤儿进程 1.背景知识 一操作系统的作用 ...
- python网络编程--粘包解决方案 和 subprocess模块
1.缓冲区:作用:将程序和网络解耦分为输入缓冲区, 输出缓冲区 每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区.write()/send() 并不立即向网络中传输数据,而是先 ...
- Python的并发并行[0] -> 基本概念
基本概念 / Basic Concept 快速跳转 进程 / Process 线程 / Thread 协程 / Coroutine 全局解释器锁 / Global Interpreter Lock ...
- Python 之并发编程之进程上(基本概念、并行并发、cpu调度、阻塞 )
一: 进程的概念:(Process) 进程就是正在运行的程序,它是操作系统中,资源分配的最小单位. 资源分配:分配的是cpu和内存等物理资源 进程号是进程的唯一标识 同一个程序执行两次之后是两个进程 ...
- Python的并发并行[4] -> 并发[0] -> 利用线程池启动线程
利用线程池启动线程 submit与map启动线程 利用两种方式分别启动线程,同时利用with上下文管理来对线程池进行控制 from concurrent.futures import ThreadPo ...
随机推荐
- 剑指Offer - 九度1214 - 丑数
剑指Offer - 九度1214 - 丑数2013-11-21 21:06 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. ...
- [转]赵桐正thinkphp教程笔记
原文:赵桐正thinkphp教程笔记 ,有修改 常用配置 常用配置config.php: <?php return array( //'配置项'=>'配置值' 'URL_PATHINFO_ ...
- 使用jquery validate结合zui作表单验证
1.引入jquery validate和zui <!-- jQuery (ZUI中的Javascript组件依赖于jQuery) --> <script src="${_b ...
- 不作伪分享者决定完整分享我自学Python3的全部过程细节
不作伪分享者决定完整分享我自学Python3的全部过程细节 我不要作伪分享者 十六年前我第一次见到了电脑,并深深地爱上了它: 十二年前我第一次连上了网络,并紧紧地被它爱上. 十年前的网络是田园美景 ...
- Hexo-设置阅读全文
最近使用Hexo搭建了自己的博客,并且使用了简洁但是强大的NexT主题.这里介绍一下NexT主题下设置在首页显示一篇文章的简介,在简介后面提供一个链接阅读全文来进入文章的详情页.效果请看 我的小窝 在 ...
- [洛谷P4588][TJOI2018]数学计算
题目大意:有一个数$x$和取模的数$mod$,初始为$1$,有两个操作: $m:x=x\times m$并输出$x\% mod$ $pos:x=x/第pos次操作乘的数$(保证合法),并输出$x\%m ...
- ZOJ 1081 Points Within | 判断点在多边形内
题目: 给个n个点的多边形,n个点按顺序给出,给个点m,判断m在不在多边形内部 题解: 网上有两种方法,这里写一种:射线法 大体的思想是:以这个点为端点,做一条平行与x轴的射线(代码中射线指向x轴正方 ...
- POJ 1204 Word Puzzles | AC 自动鸡
题目: 给一个字母矩阵和几个模式串,矩阵中的字符串可以有8个方向 输出每个模式串开头在矩阵中出现的坐标和这个串的方向 题解: 我们可以把模式串搞成AC自动机,然后枚举矩阵最外围一层的每个字母,向八个方 ...
- 《R语言实战》读书笔记 第七章--基本统计分析
在导入数据并且将数据进行组织和初步可视化以后,需要对数据进行分布探索和两两关系分析等.主要内容有描述性统计分析.频数表和列联表.相关系数和协方差.t检验.非参数统计. 7.1描述性统计分析 7.1.1 ...
- eclipse安装使用jetty
安装: 直接从eclipse中的eclipse_market中下载即可,关键说下配置项目的访问路径: