Python的并发并行[3] -> 进程 -> 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类型,生成的已结束子进程实例

原文地址:https://www.cnblogs.com/stacklike/p/8166950.html

时间: 2024-11-09 03:56:20

Python的并发并行[3] -> 进程 -> subprocess 模块的相关文章

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

queue 模块 / queue Module 1 常量 / Constants Pass 2 函数 / Function Pass 3 类 / Class 3.1 Queue类 类实例化:queue = queue.Queue(maxsize=0) 类的功能:用于生成一个先入先出队列实例 传入参数: maxsize maxsize: int类型,队列的最大值,无空间时阻塞,未指定时为无限队列 返回参数: queue queue: instance类型,生成的先入先出队列实例 3.1.1 put

Python之路(第二十篇) subprocess模块

一.subprocess模块 subprocess英文意思:子进程 那什么是进程呢? (一)关于进程的相关理论基础知识 进程是对正在运行程序的一个抽象,进程的概念起源于操作系统,是操作系统最核心的概念,操作系统的其他所有内容都是围绕进程的概念展开的. 所以想要真正了解进程,必须事先了解操作系统. 程序员无法把所有的硬件操作细节都了解到,管理这些硬件并且加以优化使用是非常繁琐的工作,这个繁琐的工作就是操作系统来干的,有了他,程序员就从这些繁琐的工作中解脱了出来,只需要考虑自己的应用软件的编写就可以

python 之 并发编程(进程池与线程池、同步异步阻塞非阻塞、线程queue)

9.11 进程池与线程池 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 池子内什么时候装进程:并发的任务属于计算密集型 池子内什么时候装线程:并发的任务属于IO密集型 进程池: from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor import time,os,random ? def task(x): print('%s 接客' %os.getpid()) time.

Python之路——并行编程之multiprocessing模块

Process 1 import socket 2 import time 3 from multiprocessing import Process 4 5 def talk(conn): 6 if type(conn)==socket.socket(): 7 conn.send(b'connected') 8 msg = conn.recv(1024) 9 print(msg) 10 conn.close() 11 12 13 if __name__ == '__main__': 14 sk

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

利用线程池启动线程 submit与map启动线程 利用两种方式分别启动线程,同时利用with上下文管理来对线程池进行控制 1 from concurrent.futures import ThreadPoolExecutor as tpe 2 from concurrent.futures import ProcessPoolExecutor as ppe 3 from time import ctime, sleep 4 from random import randint 5 6 def f

python实现系统脚本命令调用模块---subprocess模块

如果要python实现系统命令或者调用脚本,python中可以利用os或者subprocess模块实现: 一.os模块: 1 # coding:utf-8 2 import os #导入os模块 3 command = os.system('netstat') # os.system获取不到返回值 1 # coding:utf-8 2 import os #导入os模块 3 4 command = os.popen('ping www.baidu.com') # os.popen可以获取到返回值

Python中subprocess 模块 创建并运行一个进程

python的subprocess模块,看到官方声明里说要尽力避免使用shell=True这个参数,于是测试了一下: from subprocess import call import shlex cmd = "cat test.txt; rm test.txt" call(cmd, shell=True) 运行之后: 1:打开并浏览了test.txt文件 2:删除了test.txt文件 from subprocess import call import shlex cmd = &

并发编程之进程,多路复用,multiprocess模块

并发 1. 背景知识 2. 什么是进程 3. 进程调度 4. 并发与并行 5 同步\异步\阻塞\非阻塞(重点) 6.multiprocess模块 7.僵尸进程与孤儿进程 1.背景知识 一操作系统的作用: 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理.调度进程,并且将多个进程对硬件的竞争变得有序 二 多道技术:1.产生背景:针对单核,实现并发ps:现在的主机一般是多核,那么每个核都会利用多道技术有4个cpu,运行于cpu1的某个程序遇到io阻塞,会等到io结束再重新调度,会被调度到4个

15.python并发编程(线程--进程--协程)

一.进程:1.定义:进程最小的资源单位,本质就是一个程序在一个数据集上的一次动态执行(运行)的过程2.组成:进程一般由程序,数据集,进程控制三部分组成:(1)程序:用来描述进程要完成哪些功能以及如何完成(2)数据集:是程序在执行过程中所需要使用的一切资源(3)进程控制块:用来记录进程外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志.3.进程的作用:是想完成多任务并发,进程之间的内存地址是相互独立的二.线程:1.定义:最小的执行单位,线程的出现是为了