You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python向Linux终端发送多条命令?按序执行Python脚本需求

用Python按顺序执行Linux终端中的Python脚本

没问题,这事儿用Python的subprocess模块就能轻松搞定——它是Python和系统终端交互的标准工具,完美支持按顺序阻塞执行命令,确保前一个脚本跑完再启动下一个。

核心思路

我们要做的就是遍历你的脚本列表,对每个脚本调用subprocess.run()方法,这个方法默认会等待命令执行完成后再继续代码逻辑,刚好贴合你的需求。如果某个脚本执行失败,还可以灵活选择中断后续流程或者继续执行。

完整代码示例

假设你有一个按顺序执行的脚本路径列表,直接用下面的代码就能实现:

import subprocess

# 替换成你的脚本路径列表,按你想要的顺序排列
script_list = [
    "/home/user/scripts/step1_process_data.py",
    "/home/user/scripts/step2_analyze.py",
    "/home/user/scripts/step3_generate_report.py"
]

for script_path in script_list:
    print(f"🔍 开始执行脚本: {script_path}")
    try:
        # 执行脚本,等待完成,失败则抛出异常
        execution_result = subprocess.run(
            ["python3", script_path],
            check=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT,
            text=True
        )
        # 打印脚本的执行输出
        print(f"✅ 脚本 {script_path} 执行成功!输出内容:\n{execution_result.stdout}\n")
    except subprocess.CalledProcessError as error:
        print(f"❌ 脚本 {script_path} 执行失败!错误信息:\n{error.output}\n")
        # 可选:如果某个脚本失败就停止后续执行,注释掉下面的break可以继续执行剩余脚本
        break

关键参数解释

这里的几个参数是确保功能正常的核心:

  • ["python3", script_path]:用列表形式传入命令,避免shell注入风险,比直接写字符串更安全;
  • check=True:当脚本执行返回非0状态码(也就是执行失败)时,自动抛出CalledProcessError异常,方便我们捕获错误;
  • stdout=subprocess.PIPE + stderr=subprocess.STDOUT:把脚本的标准输出和错误输出都捕获到execution_result.stdout里,方便我们查看执行细节;
  • text=True:让输出以字符串形式返回,而不是字节流,直接打印更方便。

额外场景处理

1. 需要在特定工作目录执行脚本

如果你的脚本依赖某个工作目录的文件,可以加上cwd参数指定执行路径:

subprocess.run(
    ["python3", script_path],
    check=True,
    cwd="/home/user/workspace",  # 指定脚本执行的工作目录
    stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT,
    text=True
)

2. 使用虚拟环境执行脚本

如果你的脚本需要用虚拟环境的Python解释器,直接换成虚拟环境的python路径就行:

# 比如虚拟环境在/home/user/venv下
subprocess.run(
    ["/home/user/venv/bin/python", script_path],
    check=True,
    stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT,
    text=True
)

3. 必须使用shell执行(不推荐)

如果你的场景需要shell特性(比如环境变量加载、管道命令),可以设置shell=True,但要注意不要传入不可信的脚本路径,避免shell注入风险:

subprocess.run(
    f"python3 {script_path}",
    shell=True,
    check=True,
    stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT,
    text=True
)

注意事项

  • 确保系统里的python3命令可用,或者换成你的Python解释器绝对路径(比如/usr/bin/python3.9);
  • 脚本路径尽量用绝对路径,避免因工作目录变化导致找不到脚本;
  • 如果脚本需要执行权限,用python3 script.py的方式不需要额外设置chmod +x,直接就能运行。

内容的提问来源于stack exchange,提问作者KAMAL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:14:04