zoukankan      html  css  js  c++  java
  • Python_子进程管理subprocess模块

    subprocess中,允许生成新的进程,连接到input/output/error管道,并获取他们的返回(状态)码,主要用于替换os.system/os.spawn*几个旧的模块和方法

    subprocess模块常用函数:

    subprocess.run(args,*,stdin=None,input=None, stdout=None,stderr=None,

    shell=False, timeout=None, check=False,universal_newlines=False)

    python 3.5新增函数,用于执行指定的命令,命令完成后返回一个包含

    执行结果的completedProcess类的实例  

    stdout,stderr :默认不会捕获命令执行结果的正常输出和错误输出,若我们要获取这些内容,则需传递dubprocess.PIPE获取相应内容

    subprocess.call(args,*,stdin=None,stdout=None,

                             stderr=None,shell=False,timeout=None)

    执行指定的命令,返回命令执行状态,在Python3.5过后的版本已经弃用     

    subprocess.check_call(args,*,stdin=None,stdout=None,

                                        stderr=None,shell=False,timeout=None)

    执行指定的命令,若指定成功则返回状态码,否则抛出异常,等价与subprocess.run(...,check=True)
    call(),check_call()中stdout/stderr默认会返回命令执行状态码,所以stdout/stderr不适合赋值为subprocess.PIPE

    subprocess.check_output(args,*,stdin=None,stderr=None,

                     shell=False,universal_newlines=False,timeout=None)

    执行指定命令,若执行状态码为0则返回命令执行结果,否则抛出异常
    stdout/stderr中函数默认返回命令执行结果,若结果中需捕获错误信息,可执行stderr=subprocess.STDOUT
    subprocess.getoutput(cmd)

    接收字符串格式的命令,执行指定命令,获取执行结果,但无法获取命

    令执行状态功能类似os.popen(cmd).read()

    subprocess.getstatusoutput(cmd) 执行cmd命令,返回一个元组(命令执行状态,命令执行结果输出)
    args:要执行的shell命令,默认为字符串序列如['df','-Th']或('df','-Th'),为单独字符串时‘df-Th’,须设置shell=True
    shell:若shell=True,指定的命令将通过shell执行,或run访问管道,文件名通配符,环境变量等扩展功能时
    check:若check=True,切执行命令的进程以非0状态码退出时,则会抛出calledprocesserror异常,该异常可能会包含参数、退出状态码、stdout/stderr等
    input:该参数是传递给Popen.communicate(),通常该参数的值必须是一个字节序列,若universal_newlines=True,则该值为一个字符串
    universal_newlines:该参数影响输入与输出的数据格式默认为False,stdout/stderr输出字节序列,反之,为字符串序列

    注:在Python3.5之后的版本,建议使用subprocess.run()函数来替代subprocess.call()和其他函数来使用subprocess模块的功能使用

    实例:

    实例:

    实例:

    1.subprocess.CompletedProcess类

                       subprocess.run()函数返回值(一个实例)

    2. subprocess.Popen类

      call()无法获取执行命令的结果,然而可以通过Popen()+管道的使用 (stdout=subprocess.PIPE)获取执行命令执行的结果

    subprocess.Popen()的构造函数

    args 执行shell命令,可以是字符串也可以是各个参数组成的序列
    bufsize 缓存策略,0表示不缓冲,1表示行缓冲,大于1的数字表示缓冲区太小,负数表示使用系统默认缓存策略
    stdin,stdout,stderr 表示程序的标准输入、输出、错误句柄
    preexec_fn 用于指定一个将在子进程进行之前被调用的可执行对象(在Unix平台下有效)
    clase_fds 在Windows平台下,设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道
    shell 用于标识是否使用shell作为执行的程序,shell=True,表示将args作为字符串传递
    cwd 设置子进程当前目录,若cwd!=None,则该函数将会在执行这个子进程之前改变当前工作目录
    env 用于指定子进程的环境变量,若env=None,则子进程的环境变量将从父进程中继承,否则它的值必须是一个映射对象
    universal_newlines True,则该文件对象的stdin,stdout,stderr将会作为文本流被打开,否则他们将会被作为二进制流被打开
    startupinfo/creationflags 只有在Windows下有效,他们将被传递给底层的CreatProcess()函数,用于设置子进程的一些属性,如进程优先级等

    subprocess.Popen类可调用的方法:

    Popen.poll() 用于检查子进程(命令)是否已经执行结束,没有结束返回None,结束后返回状态码
    Popen.wait(timeout=None) 等待子进程结束,并返回状态码,若在timeout指定秒数后进程还没有结束,则抛出异常  
    Popen.communicate(input=None,timeout=None)

    用于与进程进行交互,如发送数据到stdin,或从stdout,stderr读取数据,其中timeout

    参数为Python3中才增加的

    Popen.send_signal(signal) 停止该子进程
    Popen.kill() 杀死该子进程

    实例:

    笔记参考于:https://www.cnblogs.com/yyds/p/7288916.html

  • 相关阅读:
    unity, sceneview 中拾取球体gizmos
    C#, float.ToString()的一个坑
    unity, SerializedObject.FindProperty不要写在Editor的OnEnable里,要写在OnInspectorGUI里
    unity, 查看.anim中的动画曲线(和帧)
    unity, Graphics.Blit (null, null, mat,0);
    unity, GL.TexCoord or GL.Color must put before GL.Vertex!!!
    (MyEclipse) MyEclipse完美破解方法(图)
    博客园kubrick主题
    sina微博加入到博客园
    MyEclipse 2014 破解图文详细教程
  • 原文地址:https://www.cnblogs.com/Vera-y/p/9719365.html
Copyright © 2011-2022 走看看