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

Python通过subprocess调用脚本时如何传递并接收参数?

解决方法:子进程参数接收与并行调用修正

一、修正s.py的并行逻辑

你的s.py存在几处问题需要调整:

  • processToParallelize未接收pool.map传递的参数,且变量l未定义
  • text=true需改为text=True(Python大小写敏感)
  • python_path替换为实际Python解释器路径(如"python"或"python3")

假设每个并行任务对应独立的l值,修正后的s.py示例:

import multiprocessing as mp
import subprocess

def processToParallelize(l):
    # 每个进程内的l值固定,调用子进程时传递该值
    subprocess.call(["python", "./子文件夹路径/o.py"], input=str(l), text=True)

if __name__ == '__main__':
    NUMBER_OF_TASKS = 2
    # 示例:4个不同的l值,对应4个并行任务
    l_values = [10, 20, 30, 40]
    pool = mp.Pool(NUMBER_OF_TASKS)

    pool.map(processToParallelize, l_values)

    pool.close()
    pool.join()

二、o.py接收参数的两种方式

方式1:读取标准输入(对应subprocess的input参数)

你通过subprocess.call的input参数传递的l会进入子进程的标准输入,o.py可通过sys.stdin读取:

import sys

# 读取输入并去除首尾空白(如换行符)
r = sys.stdin.read().strip()
# 若l是数值类型,需做类型转换:r = int(sys.stdin.read().strip())

def someoperation(r_val):
    # 示例业务操作
    return r_val * 2

x = someoperation(r)

方式2:通过命令行参数传递(更直观)

若改用命令行传参,s.py的调用代码调整为:

subprocess.call(["python", "./子文件夹路径/o.py", str(l)])

o.py通过sys.argv接收参数:

import sys

# sys.argv[0]是脚本名,sys.argv[1]为传入的第一个参数
r = sys.argv[1]
# 数值类型转换:r = int(sys.argv[1])

def someoperation(r_val):
    return r_val * 2

x = someoperation(r)

三、关于l值不变的说明

每个mp.Pool启动的进程会拿到独立的l值(来自l_values列表),在该进程生命周期内l不会被修改;而每个subprocess启动的子进程仅接收一次传递的l值,运行过程中该值始终固定,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:42:41