zoukankan      html  css  js  c++  java
  • 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类型,生成的已结束子进程实例

  • 相关阅读:
    三分
    知识点整合摘取
    Codeforces Round #533 C. Ayoub and Lost Array
    判断当前VC 是push还是present的
    自动布局
    获取当前的 viewController
    UIImageView 点击放大缩小
    UIButton 在UIScrollView里面 点击效果不明显的问题
    IOS AutoLayout 遍历修改约束
    GIT 命令 操作 记录
  • 原文地址:https://www.cnblogs.com/stacklike/p/8166950.html
Copyright © 2011-2022 走看看