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

Python循环调用subprocess脚本时如何传递循环变量参数

解决方法

方法1:通过命令行参数传递(最常用)

主脚本修改方式

直接把变量x作为命令行参数拼接在调用命令后,推荐用列表形式传参避免shell注入风险,示例代码:

import subprocess

for x in range(1, 11):
    x_str = str(x)
    # 调用foo.py
    p = subprocess.Popen(['python', 'foo.py', x_str], shell=False)
    out, err = p.communicate()
    # 调用bar.py
    p = subprocess.Popen(['python', 'bar.py', x_str], shell=False)
    out, err = p.communicate()
    # 调用bas.py
    p = subprocess.Popen(['python', 'bas.py', x_str], shell=False)
    out, err = p.communicate()

如果你坚持要用shell=True的写法,用f字符串拼接即可:
cmd = f'python foo.py {x}'

被调用脚本(以foo.py为例)接收方式

用sys模块的argv列表接收参数,argv[0]是脚本自身名称,argv[1]就是传入的第一个参数:

import sys

# 注意传入的参数默认是字符串类型,需要按需转换类型
if len(sys.argv) < 2:
    print("缺少参数x")
    sys.exit(1)
x = int(sys.argv[1])
# 后续正常使用x变量即可

bar.py和bas.py的接收方式和foo.py完全一致。

方法2:通过环境变量传递

如果需要传递的变量较多,也可以通过环境变量传值:

主脚本修改方式

import subprocess
import os

for x in range(1, 11):
    # 复制当前系统环境变量,新增自定义变量
    custom_env = os.environ.copy()
    custom_env['MY_X_VAR'] = str(x)
    # 调用时传入自定义环境变量
    p = subprocess.Popen(['python', 'foo.py'], shell=False, env=custom_env)
    out, err = p.communicate()
    # 其余两个脚本调用逻辑同上,替换脚本名即可

被调用脚本接收方式

import os

x_str = os.environ.get('MY_X_VAR')
if not x_str:
    print("未读取到环境变量MY_X_VAR")
    exit(1)
x = int(x_str)
# 后续使用x即可

注意事项

  • 所有通过命令行/环境变量传递的参数默认都是字符串类型,接收后需要根据业务需求转换为int、float等对应类型
  • 推荐优先使用shell=False的列表传参方式,避免参数中存在特殊字符时解析出错,也能规避shell注入的安全风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:36:02