已复制
全屏展示
复制代码

Python调用并执行外部Linux命令

· 1 min read

简单版

使用 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)
🔗

文章推荐