美文网首页
python subprocess模块调用shell命令

python subprocess模块调用shell命令

作者: ScienBeast | 来源:发表于2019-02-11 17:59 被阅读0次

    简介

    python中的subprocess模块已经开始代替os模块(os.system,os.spawn,os.popen,popen2.,commands.)调用shell命令,并与之进行信息通信。subprocess模块可以生成新的进程执行shell命令,并与标准输入,输出,错误输出管道通信。

    先来看个简单例子,Popen是一个封装类,Popen中第一个参数是shell命令(list格式),第二个和第三个参数分别为标准输出和错误

    #!/usr/bin/env python 
     
    from subprocess import Popen, PIPE
     
    process = Popen(['cat', 'test.py'], stdout=PIPE, stderr=PIPE)
    stdout, stderr = process.communicate()
    print stdout
    

    process.communicate()函数会从进程中读取shell命令的标准输出和返回的错误,如果要等待子进程执行完成需要加上Popen.wait().

    Subprocess call()

    subprocess有个call方法可以调用shell命令
    用法:subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
    实例:

    #!/usr/bin/env python
    
    import subprocess
    ret = subprocess.call(["ls", "-l"])
    print "return value is : %d"%ret
    -----------------------------------------------------
    total 4
    drwxr-xr-x 2 root root   6 Feb 11 16:27 cloudfront-record
    drwx------ 3 root root  16 Nov 13 13:46 systemd-private-076a135c402143f78c1000cee846fa41-ntpd.service-AFBhcj
    -rw-r--r-- 1 root root 112 Feb 11 17:38 test.py
    return value is : 0
    

    我们可以看到执行正确时返回结果为0, call()方法不能获取输出结果

    process output

    check_output()方法可以获取执行结果
    用法 subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)

    实例:

    #!/usr/bin/env python 
    import subprocess
    ret  = subprocess.check_output(["echo", "hello world"])
    print("return value  = " + ret)
    --------------------------------------------------------------------
    return value  = hello world
    

    相关文章

      网友评论

          本文标题:python subprocess模块调用shell命令

          本文链接:https://www.haomeiwen.com/subject/tpiqeqtx.html