7-subprocess

作者: 神秘加冰 | 来源:发表于2019-01-15 21:26 被阅读0次

    运行外部命令

    completed = subprocess.run(['ls','-al'])
    print("return code: ",completed.returncode) # return code:  0c
    

    shell

    completed = subprocess.run("ls -al",shell=True)
    print("return code: ",completed.returncode) # return code:  0c
    

    错误处理,添加 check参数

    try:
        completed = subprocess.run(['false'],check=True)
    except subprocess.CalledProcessError as err:
        print("Err:",err)  #Err: Command '['false']' returned non-zero exit status 1.
    

    捕捉输出

    complete = subprocess.run(['ls','-al'],stdout=subprocess.PIPE)
    print("return code : ",complete.returncode)
    print("stdout: ",complete.stdout.decode("utf-8"))
    # python3.7 只需要加一个关键参数 capture_output
    >>> a = subprocess.run(['ls','-al'],capture_output=True)
    >>> a.stdout
    

    捕捉错误输出

    completed = subprocess.run(["false"],stderr=subprocess.PIPE)
    print("Error:",completed.stderr)
    

    直接使用Popen函数

    completed = subprocess.Popen(["echo","Hello World"],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    stdout = completed.communicate()[0].decode('utf-8')
    print("stdout: ",stdout)
    # 使用communicate的原因
    # communicate 是一个管道,用来输出输入消息
    

    不使用communicate也可以

    completed = subprocess.Popen(["echo","Hello World"],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    print("stdout: ",completed.stdout.readline().decode("utf-8"))
    

    使用communicate进行输入

    completed = subprocess.Popen(["cat"],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    msg = "cat Hello World \n"
    stdout = completed.communicate(msg.encode("utf-8"))[0] # 返回一个tuple
    print(stdout.decode())
    

    管道流

    cat = subprocess.Popen(['cat','README.md'],stdout=subprocess.PIPE)
    grep = subprocess.Popen(["grep","testing"],stdin=cat.stdout,stdout=subprocess.PIPE)
    print(grep.stdout.readline())
    

    相关文章

      网友评论

        本文标题:7-subprocess

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