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

导入Python脚本作为模块时如何传参?以MMDetection视频检测脚本为例

解决方案

问题说明

你之前的调用方式无法生效,因为原脚本的main()没有设计为接受入参,它内部通过parse_args()从命令行读取参数,直接给main()传参不会被识别。

方案1:改造原脚本适配内部调用(推荐)

修改原脚本的main函数,让它支持外部传入参数,同时保留原命令行调用能力:

# 仅需修改main函数的定义和参数读取逻辑,其余代码保持不变
def main(args=None):
    # 没有外部传参时走原命令行解析逻辑
    if args is None:
        args = parse_args()
    assert args.out or args.show, \
        ('Please specify at least one operation (save/show the '
         'video) with the argument "--out" or "--show"')
    # 后续逻辑和原代码完全一致
    model = init_detector(args.config, args.checkpoint, device=args.device)
    # ... 其余原代码无需改动

调用示例

在你自己的脚本中按如下方式调用:

from argparse import Namespace
# 假设你的原脚本保存为 mmdet_video_infer.py
import mmdet_video_infer

# 构造和命令行参数对应的Namespace对象
run_args = Namespace(
    video=vid, # 你自己的视频路径变量
    config=config_file, # 你自己的配置文件路径变量
    checkpoint=chkpnt_file, # 你自己的权重文件路径变量
    device="cuda:0",
    score_thr=0.7,
    show=True,
    out=None, # 不需要保存输出视频就设为None,需要保存就传输出路径字符串
    wait_time=1
)

# 直接调用传参
mmdet_video_infer.main(run_args)

方案2:不修改原脚本,模拟命令行调用

如果不想改动原脚本,可以用subprocess模块模拟命令行执行:

import subprocess

# 拼接命令行参数
run_cmd = [
    "python", "原脚本的完整路径.py",
    vid,
    config_file,
    chkpnt_file,
    "--score-thr", "0.7",
    "--show"
]

# 执行调用,check=True表示执行出错会抛出异常
subprocess.run(run_cmd, check=True)

方案对比

  • 方案1灵活性更高,后续如果需要获取推理中间结果、修改逻辑也更方便,适合长期使用
  • 方案2无需改动原代码,适合临时调用的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:06:03