7-subprocess

运行外部命令

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())
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容