zoukankan      html  css  js  c++  java
  • subprocess模块详解

    subprocess是Python与系统交互的一个库,该模块允许生成新进程,连接到它们的输入/输出/错误管道,并获取它们的返回代码。

    该模块旨在替换几个较旧的模块和功能:

    os.system
    
    os.spawn
    
    os.popen
    
    popen2
    
    commands

    相关函数

    subprocess.call(args,*,stdin = None,stdout = None,stderr = None,shell = False )
    
    运行args描述的命令。等待命令完成,然后返回returncode属性
    subprocess.check_call(args,*,stdin = None,stdout = None,stderr = None,shell = False )
    
    使用参数运行命令并将其输出作为字节字符串返回。如果返回码非零,则会引发 CalledProcessError
    subprocess.check_outputargs*stdin = Nonestderr = Noneshell = Falseuniversal_newlines = False 

      使用参数运行命令并将其输出作为字节字符串返回。如果返回码非零,则会引发 CalledProcessError

    subprocess.PIPE
    可用作stdin,stdout或stderr参数的特殊值,Popen表示应打开标准流的管道
    subprocess.STDOUT
    可用作stderr参数的特殊值,Popen表示标准错误应与标准输出位于同一句柄中。
    subprocess.STDOUT
    可用作stderr参数的特殊值,Popen表示标准错误应与标准输出位于同一句柄中。

    参数介绍

    args: 要执行的shell命令程序
    stdin:执行程序的标准输入,默认值为None

    stdout:执行程序的标准输出,默认值为None

    stderr:执行程序标准错误文件句柄,默认值为None

    shell:如果该参数值为True,则将通过shell执行指定的命令

    universal_newlines:
    如果该参数值为True,则该文件对象的stdin,stdout和stderr将会作为文本流被打开,否则他们将会被作为二进制流被打开

    subprocess.Popen

    subprocess模块中的基础流程创建和管理都是由 Popen 处理。Popen 用于在一个新的进程中执行一个子程序

    subprocess.Popen(args,bufsize = 0,executable = None,stdin = None,stdout = None,stderr = None,preexec_fn = None,close_fds = False,shell = False,cwd = None,env = None,universal_newlines = False,startupinfo = None,creationflags = 0

    参数介绍

    args:是一系列程序参数或者是一个单独的字符串
    bufsize:如果给定,与内置open()函数的相应参数具有相同的含义:0表示无缓冲,1表示行缓冲,任何其他正值表示使用(大约)该大小的缓冲区。负值表示使用系统默认值,这通常意味着完全缓冲。bufsize的默认值是0(unbuffered)
    stdin,stdout,stderr:分别指定执行程序的标准输入,标准输出和标准错误文件句柄
    preexec_fn:如果设置为可调用对象,则在执行子进程之前,将在子进程中调用此对象(仅限Unix)
    close_fds:如果为True,所有的文件描述符除外0,1并 2执行子进程之前,将被关闭(仅限Unix)
    cwd:如果不是None,则子进程的当前目录在执行之前将更改为cwd的值
    env:如果不是None,则它必须是定义新进程的环境变量的映射,如果env
    =None,那么子进程的环境变量将从父进程中继承
    universal_newlines: 如果该参数值为True,则该文件对象的stdin,stdout和stderr将会作为文本流被打开,否则他们将会被作为二进制流被打开
    startupinfo:如果给定,将是一个STARTUPINFO对象,它将传递给底层CreateProcess函数(仅限Windows)
    creationflags:如果给出,可以是CREATE_NEW_CONSOLE或 CREATE_NEW_PROCESS_GROUP(仅限Windows)

    Popen类的方法

    Popen.poll()
    检查子进程是否已终止。设置并返回 returncode属性。
    Popen.wait()
    等待子进程终止。设置并返回 returncode属性。
    Popen.communicate(input=None)
    与进程交互:将数据发送到stdin。从stdout和stderr读取数据,直到达到文件结尾。返回一个元组(stdoutdata, stderrdata)
    Popen.send_signal(signal)
    将信号信号发送给子进程。
    Popen.terminate()
    停止子进程
    Popen.kill()
    杀了子进程

    Popen类的属性

    Popen.stdin
    
    如果stdin的参数是subprocess.PIPE,则此属性是一个文件对象,它为子进程提供输入。否则就是None。
    Popen.stdout
    如果stdout的参数是subprocess.PIPE,则此属性是一个文件对象,它提供子进程的输出。否则就是None。
    Popen.stderr
    如果stderr的参数是subprocess.PIPE,则此属性是一个文件对象,它提供子进程的错误输出。否则就是None。
    Popen.pid
    
    子进程的进程ID。
    Popen.returncode
    子进程的返回码,通过设置poll()和wait()(或间接的communicate())。一个None值表示进程尚未结束。负值
    -N表示该子进程被信号终止 (仅限Unix)。
  • 相关阅读:
    困扰几周了,请教啊,android与websevice数据交互很诡异的问题
    最新版本_adt-bundle-windows-x86_64-20140702 无法建立avd
    android向web提交数据,中文乱码
    activity怎么控制fragment中的textview组件
    关于云储存或者百度云的基础问题, 用java/android 实现上传文件到云储存(比如百度云)
    短信列表如何让同一个号码的短信只显示一条,刚刚加载短信列表会加载所有的数据列。求指教
    Android图片上传到服务器的问题
    安卓模拟器这么慢,大家都怎么调试的?
    浏览器前缀-----[译]Autoprefixer:一个以最好的方式处理浏览器前缀的后处理程序
    windows 下安装nodejs及其配置环境
  • 原文地址:https://www.cnblogs.com/delav/p/9873410.html
Copyright © 2011-2022 走看看