Python subprocess模块执行CMD命令
做windows开发时经常会使用到该模块,用于执行控制台命令,获取命令返回值等,一般使用Popen和run即可,其他较为少用,run函数会等命令执行完毕再继续执行下一步,而Popen不会。
官方文档介绍:subprocess --- 子进程管理 — Python 3.12.0 文档
封装如下:
def exec_cmd(cmd: str, shell: bool = False):
"""执行CMD命令
:param cmd: 命令内容
:param shell: 是否需要启用shell
:return:
"""
try:
print(f"[INPUT]: {cmd}")
if shell:
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
out, err = proc.communicate()
else:
proc = subprocess.run(cmd.split(), capture_output=True,
check=True, shell=False)
out = proc.stdout
# 获取输出时注意编码错误
try:
result = out.decode('utf8').strip()
except UnicodeError:
try:
result = out.decode('gbk').strip()
except UnicodeError:
result = out.decode('ansi').strip()
result and print(f"[OUTPUT]: {result}")
return result
except subprocess.SubprocessError as se:
pringt(f'[ERROR]: {se}')
raise se