zoukankan      html  css  js  c++  java
  • python-subprocess

    
    

    【subprocess 模块】

    subprocess 允许你生成新的子进程,连接到子进程的标准输入,输出,错误输出等,并获得它的返回值,这个模块后续会替换掉一些老的模块  

    os.system
    os.spawn*
    os.popen*
    popen2.*
    commands.*

    subprocess.call():运行命令与参数。等待命令完成,返回执行状态码。

    [root@jinkangldap ~]# cat k.py 
    import subprocess
    retcode = subprocess.call(["/bin/bash","/root/1.sh"])
    print retcode
    [root@jinkangldap ~]# cat /root/1.sh 
    exit 9
    [root@jinkangldap ~]# python k.py 
    9

    subprocess.check_call():运行命令与参数。如果退出状态码非 0,引发 CalledProcessError 异
    常,包含状态码。

    如果要执行成功,不跑出异常,建议在命令后面加上exit 0

    cmd="ls nofile;exit 0"
    
    subprocess.check_output(cmd,shell=True)
    [root@jinkangldap ~]# cat 1.sh 
    exit 1
    
    [root@jinkangldap ~]# python k.py 
    Traceback (most recent call last):
      File "k.py", line 6, in <module>
        subprocess.check_call(["/bin/bash","/root/1.sh"])
      File "/usr/lib64/python2.7/subprocess.py", line 542, in check_call
        raise CalledProcessError(retcode, cmd)
    subprocess.CalledProcessError: Command '['/bin/bash', '/root/1.sh']' returned non-zero exit status 9
    
    [root@jinkangldap ~]# cat 1.sh 
    exit 0
    [root@jinkangldap ~]# python k.py 
    [root@jinkangldap ~]# 

     subprocess.check_output() 返回其输出作为字节字符串。

     运行命令与参数,如果返回值不为0引发 CalledProcessError 异常。

     subprocess.check_call() 和  subprocess.check_output()的区别

     前者返回命令执行的返回值,后者返回命令的输出

    subprocess中 shell=True shell=False 的区别。
    shell=True参数会让subprocess.call接受字符串类型的变量作为命令,并调用shell去执行这个字符串,
    shell=False时,subprocess.call只接受数组变量作为命令,并将数组的第一个元素作为命令,剩下的全部作为该命令的参数。

    subprocess.call()  返回执行命令的返回值。
    subprocess.check_call() 返回执行命令的返回值,如果非0,就抛出异常错误
    subprocess.check_output() 返回命令的执行的输出,命令执行返回值若非0 ,就抛出异常。

    subprocess.Popen

    import subprocess
    def tiny_p(cmd, capture=True):
        # Darn python 2.6 doesn't have check_output (argggg)
        stdout = subprocess.PIPE
        stderr = subprocess.PIPE
        if not capture:
            stdout = None
            stderr = None
        sp = subprocess.Popen(cmd, stdout=stdout,
                        stderr=stderr, stdin=None)
        (out, err) = sp.communicate()
        print "outtt",out
        ret = sp.returncode
        print ret
        if ret not in [0]:
            raise RuntimeError("Failed running %s [rc=%s] (%s, %s)"
                                % (cmd, ret, out, err))
        return (out, err)
  • 相关阅读:
    设置开发环境
    安装开发软件
    学习路线
    预备知识
    Spring是什么
    yum安装nginx
    .net 哈希
    Excel文件处理Demo
    汉字处理组件
    Log4Net
  • 原文地址:https://www.cnblogs.com/jkklearn/p/8093888.html
Copyright © 2011-2022 走看看