You need to enable JavaScript to run this app. 如何通过shell脚本并行运行两个Python脚本并存储返回值到变量
优惠活动
大模型
产品
解决方案
定价
更多

如何通过shell脚本并行运行两个Python脚本并存储返回值到变量

双Python脚本并行执行并捕获返回值的实现方案

说明:以下实现均使用Python标准库完成,无需安装任何第三方依赖,返回值完全匹配要求的0/1取值规则。

核心实现逻辑

提到的脚本返回值为0/1,对应两种常见的返回场景:

  • 脚本通过sys.exit(0)/sys.exit(1)传出退出状态,这是独立脚本执行时最通用的返回值形式
  • 脚本将0/1作为打印内容输出到标准输出
    两种场景均可通过子进程调度的方式实现并行执行和值捕获。

方法1:简洁线程池调度实现(推荐)

使用concurrent.futures线程池提交两个脚本的执行任务,代码可读性高、异常处理完善,适合绝大多数常规场景。

import sys
import subprocess
from concurrent.futures import ThreadPoolExecutor

def run_script(script_path: str) -> int:
    # 调用当前环境对应的Python解释器执行目标脚本
    exec_result = subprocess.run(
        [sys.executable, script_path],
        capture_output=True,
        text=True
    )
    # 若返回值是脚本退出码,直接返回exit状态
    return exec_result.returncode

# 并行提交两个执行任务
with ThreadPoolExecutor(max_workers=2) as executor:
    task1 = executor.submit(run_script, "script1.py")
    task2 = executor.submit(run_script, "script2.py")
    # 等待任务执行完成,将结果存入指定变量
    x = task1.result()
    y = task2.result()
  • 因为subprocess.run属于IO阻塞型操作,用线程池的资源开销远低于进程池,完全可以实现两个脚本的真正并行运行
  • sys.executable会自动匹配当前运行环境的Python解释器路径,避免不同环境下解释器找不到的问题
  • 若返回值是脚本打印的stdout内容,只需将run_script的返回逻辑修改为return int(exec_result.stdout.strip())即可

方法2:原生子进程启动实现(更灵活可控)

直接通过subprocess.Popen启动两个独立子进程,并行启动无额外等待逻辑,适合需要细粒度控制进程状态的场景。

import subprocess
import sys

# 非阻塞启动两个脚本的独立子进程
proc1 = subprocess.Popen([sys.executable, "script1.py"])
proc2 = subprocess.Popen([sys.executable, "script2.py"])

# 等待两个进程全部执行结束,直接获取退出码存入变量
x = proc1.wait()
y = proc2.wait()
  • 两个子进程从启动时刻开始完全独立并行运行,不存在串行等待的逻辑
  • Python脚本如果抛出未捕获的异常,解释器会自动以退出码1结束进程,和要求的0/1返回值规则完全匹配
  • 若需要读取脚本打印的返回值,可在Popen中添加stdout=subprocess.PIPE参数,将wait()替换为communicate()方法读取标准输出内容,转成整数后存入对应变量即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 06:54:03