简单版
使用 os 模块下的 system 执行命令,缺点是它没法获取执行命令的 标准输出、标准错误,它只能获取到执行命令的返回码,为 0 表示执行成功,非 0 表示执行错误。
import os
exit_status = os.system("cat /etc/profile | wc -l")
print("exit_status: " + str(exit_status))
完善版
使用 subprocess 模块执行 bash 命令,调用 linux 命令,执行外部命令,可以获得 stdout stderr 的值,以及返回码。
- cmd 出入的命令行,可以多个命令,可以管道
- cwd 执行命令目录,默认是脚本所在目录
- shell 为 True 通过 shell 执行
- raise_error 遇到错误是否抛出错误,不抛出错误则通过标准错误返回错误信息
import subprocess
def bash_cmd(cmd, cwd=None, shell=True, raise_error=False):
process = subprocess.Popen(
cmd, cwd=cwd, shell=shell,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
o, e = process.communicate()
code = process.returncode
stdout, stderr = o.decode(), e.decode()
if (code != 0) and raise_error:
raise Exception(stderr)
return code, stdout, stderr
code, stdout, stderr = bash_cmd('cd /; where are you from')
print('code: ' + str(code))
print('stdout: ' + stdout)
print('stderr: ' + stderr)
code, stdout, stderr = bash_cmd('cat /etc/profile | wc -l')
print('code: ' + str(code))
print('stdout: ' + stdout)
print('stderr: ' + stderr)