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 模块的更多相关文章

  1. Python的并发并行[1] -> 线程[0] -> threading 模块

    threading模块 / threading Module 1 常量 / Constants Pass 2 函数 / Function 2.1 setprofile()函数 函数调用: thread ...

  2. Python的并发并行[2] -> 队列[0] -> queue 模块

    queue 模块 / queue Module 1 常量 / Constants Pass 2 函数 / Function Pass 3 类 / Class 3.1 Queue类 类实例化:queue ...

  3. Python的并发并行[3] -> 进程[1] -> 多进程的基本使用

    多进程的基本使用 1 subprocess 常用函数示例 首先定义一个子进程调用的程序,用于打印一个输出语句,并获取命令行参数 import sys print('Called_Function.py ...

  4. Python之路(第三十七篇)并发编程:进程、multiprocess模块、创建进程方式、join()、守护进程

    一.在python程序中的进程操作 之前已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起来的python程序 ...

  5. 网络基础之 并发编程之进程,多路复用,multiprocess模块

    并发 1. 背景知识 2. 什么是进程 3. 进程调度 4. 并发与并行 5 同步\异步\阻塞\非阻塞(重点) 6.multiprocess模块 7.僵尸进程与孤儿进程 1.背景知识 一操作系统的作用 ...

  6. python网络编程--粘包解决方案 和 subprocess模块

    1.缓冲区:作用:将程序和网络解耦分为输入缓冲区, 输出缓冲区 每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区.write()/send() 并不立即向网络中传输数据,而是先 ...

  7. Python的并发并行[0] -> 基本概念

    基本概念 / Basic Concept  快速跳转 进程 / Process 线程 / Thread 协程 / Coroutine 全局解释器锁 / Global Interpreter Lock ...

  8. Python 之并发编程之进程上(基本概念、并行并发、cpu调度、阻塞 )

    一: 进程的概念:(Process) 进程就是正在运行的程序,它是操作系统中,资源分配的最小单位. 资源分配:分配的是cpu和内存等物理资源 进程号是进程的唯一标识 同一个程序执行两次之后是两个进程 ...

  9. Python的并发并行[4] -> 并发[0] -> 利用线程池启动线程

    利用线程池启动线程 submit与map启动线程 利用两种方式分别启动线程,同时利用with上下文管理来对线程池进行控制 from concurrent.futures import ThreadPo ...

随机推荐

  1. ajax向Asp.NET后端传递数组型数据

    近日,在开发一个组件的过程中,需要通过Ajax对象向Asp.NET后端传递一个比较复杂的表单,表单中的一个字段是数组类型,我能想到的办法是用JSON.stringify将前端的数组对象序列化成字符串, ...

  2. WebDriver--简单元素操作

    clear():清除文本,可用来键盘输入前清除一些input输入框默认的值 send_key(*value):模拟按键输入 click():单击,不止按钮,也可以是文字/图片链接.复选框.单选框.下拉 ...

  3. 新建git仓库--留

    1.git config 配置配置息,查看配置信息

  4. HDU 4031 Attack (线段树)

    成功袭击次数=所有袭击次数-成功防守次数 需要一个辅助pre来记录上一次袭击成功什么时候,对于每个查询,从上一次袭击成功开始,每隔t更新一次. 感觉这样做最坏时间复杂度是O(n^2),这里 说是O(q ...

  5. HDU 3887 Counting Offspring (树状数组+人工模拟栈)

    对这棵树DFS遍历一遍,同一节点入栈和出栈之间访问的节点就是这个节点的子树. 因此节点入栈时求一次 小于 i 的节点个数 和,出栈时求一次 小于 i 的节点个数 和,两次之差就是答案. PS.这题直接 ...

  6. PHP文件操作函数及文件指针理解

    知识点: 一.fopen(),文件打开函数,读写参数有: 1.R  : 只读,指针在文件开头 2.r+:读写,指针同上 3.W :只写,写入前会删除文件内容,然后指针回到文件开头,文件不存在则创建 4 ...

  7. Nginx与Tomcat集成

    Nginx用来处理静态页面的请求,JSP交给Tomcat处理 安装JDK 安装后,配置好JAVA_HOME和PATH Mac查看JAVA_HOME路径的方法:/usr/libexec/java_hom ...

  8. 【bzoj3325】[Scoi2013]密码 逆模拟Manacher

    题目描述 给出一个只包含小写字母的字符串的长度.以每一个字符为中心的最长回文串长度.以及以每两个相邻字符的间隙为中心的最长回文串长度,求满足条件的字典序最小的字符串. 输入 输入由三行组成.第一行仅含 ...

  9. 【bzoj4819】[Sdoi2017]新生舞会 分数规划+费用流

    题目描述 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间的关系,比如两个 ...

  10. Spark on Yarn——spark1.5.1集群配置

    写在前面: spark只是一种计算框架,如果要搭建集群要依托与一定的组织模式. 目前来说,Spark集群的组织形式有三种: 1.      Standalone:使用akka作为网络IO组件,mast ...