1.subprocess的使用小结
https://docs.python.org/zh-cn/3/library/subprocess.html
shell_str = f""
print(f"do shell {shell_str}")
shell_obj = subprocess.run(shell_str, stdout=subprocess.PIPE, shell=True)
py3以后建议使用subprocess.run来执行shell,在linux下指定shell=true,stdout管道输出,其值可以在shell_obj对象中获取,输出是字节串需要转为字符串
subprocess.run(args, *,
stdin=None, input=None,
stdout=None, stderr=None,
capture_output=False, shell=False,
cwd=None, timeout=None,
check=False, encoding=None,
errors=None, text=None,
env=None, universal_newlines=None,
**other_popen_kwargs)
参数
1.第一个位置传参为需要执行的命令
capture_output 设为 true,stdout 和 stderr 将会被捕获,并且stdout=PIPE 和 stderr=PIPE 创建,可用于输出结果
2.check 设为 True, 并且进程以非零状态码退出,可用被try except
3.stdout 为标准输出的方式, stdout=subprocess.PIPE会保存在函数返回的subprocess.CompletedProcess对象中
CompletedProcess
改对象由subprocess.run返回,其属性是命令执行的信息,包括输出,状态等
CompletedProcess.args 执行的命令参数
CompletedProcess.returncode 命令执行状态码
CompletedProcess.stdout 从子进程捕获到的标准输出,字节序列
CompletedProcess.stderr 捕获到的子进程的标准错误,字节序列
CompletedProcess.check_returncode() 非零抛出exceptiion
2.字节转字符
#str转bytes:
bytes('123', encoding='utf8')
str.encode('123')
#bytes转str:
str(b'123', encoding='utf-8')
bytes.decode(b'123')