在 Python 中,subprocess 模块提供了灵活的方法来创建新进程、连接到它们的输入/输出/错误管道,并获取它们的返回码。在许多情况下,我们需要从 Python 脚本中执行系统命令,并检查其执行状态。subprocess.run() 函数是 subprocess 模块中一个常用的接口,用于执行外部命令。

subprocess.run() 的基本用法

subprocess.run() 在 Python 3.5 中被引入,是执行命令的高级接口。它的基本语法如下:

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False)
  • args: 要执行的命令及其参数,可以是字符串或序列。
  • stdin, stdout, stderr: 分别是标准输入、输出和错误流。
  • shell: 如果为 True,命令将在 shell 中执行。
  • timeout: 超时时间,单位为秒。
  • check: 如果为 True,当进程返回非零状态码时,将会引发 subprocess.CalledProcessError 异常。

执行示例

以下是一个简单的示例,我们将执行一个 shell 命令并获取其输出:

import subprocess

# 执行 shell 命令
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)

# 检查命令的返回码
if result.returncode == 0:
    print("命令执行成功!")
    print("命令输出:")
    print(result.stdout)  # 输出命令的标准输出
else:
    print("命令执行失败,错误信息:")
    print(result.stderr)  # 输出命令的标准错误

在这个示例中,我们使用 ls -l 命令列出当前目录下的文件。我们通过 capture_output=True 来捕获标准输出和标准错误流,并将 text=True 设置为获取字符串类型的输出。

检查状态

通过 result.returncode 可以检查命令的执行状态。如果返回值为 0,则表示成功;任何非零值则表示发生了错误。例如,尝试运行一个不存在的命令:

result = subprocess.run(['nonexistent_command'], capture_output=True, text=True)

if result.returncode != 0:
    print("命令执行失败,错误信息:")
    print(result.stderr)

异常处理

当需要严格检查命令执行的状态并处理错误时,我们可以使用 check=True 参数。此时,任何非零返回码都会引发 CalledProcessError 异常:

try:
    result = subprocess.run(['ls', '-l'], check=True, capture_output=True, text=True)
    print("命令输出:")
    print(result.stdout)
except subprocess.CalledProcessError as e:
    print("命令执行失败,错误代码:", e.returncode)
    print("错误信息:", e.stderr)

小结

通过 subprocess.run(),我们可以方便地在 Python 中执行外部命令,并有效地处理返回状态和结果。掌握这一方法,可以使我们在开发脚本、自动化任务及与其他系统交互时更加高效和灵活。同时,注意合理处理异常和状态码,有助于提升程序的健壮性。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部