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

通用包装函数Python模块开发:基于命令行参数调用不同实现

嘿,我来给你分享一个简洁且可扩展的实现思路,刚好匹配你要做的这个包装器模块需求!

实现方案详解

1. 先明确项目目录结构

先把你的项目结构捋清楚,这样后续代码逻辑更清晰:

your_project/
├── main.py
├── tools/
│   └── profile.py
├── machineA/
│   └── measure.py
└── machineB/
    └── measure.py

2. tools/profile.py 的实现

这里我们用动态导入的方式来根据命令行参数加载对应的measure模块,同时做一些错误处理,避免传入未知机器类型时崩溃:

import argparse
import importlib

def profile():
    # 解析命令行参数,限制可选机器类型,自动生成帮助信息
    parser = argparse.ArgumentParser(description='Run measurement for specific machine')
    parser.add_argument('--machine', required=True, choices=['machineA', 'machineB'], 
                        help='Specify the machine type: machineA or machineB')
    args = parser.parse_args()

    try:
        # 动态导入对应机器的measure模块
        measure_module = importlib.import_module(f'{args.machine}.measure')
        # 调用模块中的核心measure函数
        measure_module.measure()
    except ImportError as e:
        print(f"Error loading measurement module for {args.machine}: {e}")
    except AttributeError:
        print(f"The measure module for {args.machine} doesn't have a 'measure' function!")

if __name__ == '__main__':
    profile()

代码亮点说明

  • 用argparse处理参数既保证合法性(通过choices限定可选值),又能自动生成友好的帮助提示,不用自己写参数校验逻辑。
  • importlib.import_module实现动态导入,以后新增机器类型(比如machineC),只需要添加对应的目录和measure.py,完全不用修改profile.py,完美符合开闭原则。
  • 加入异常捕获,处理模块不存在或者模块中没有measure函数的情况,让程序更健壮,不会因为小问题直接崩溃。

3. main.py 的调用方式

在main.py里直接调用profile函数就行,非常简洁:

from tools.profile import profile

if __name__ == '__main__':
    profile()

4. 后续扩展建议

  • 如果要新增machineC,只需要创建machineC/measure.py并实现measure()函数,profile.py不需要任何改动。
  • 如果需要给measure()传递额外参数,可以在argparse里添加对应参数,然后传递给函数,比如:
    parser.add_argument('--sample-size', type=int, default=100, help='Sample size for measurement')
    # ...
    measure_module.measure(args.sample_size)
    
  • 要是机器类型特别多,可以把可选类型做成配置文件(比如JSON),从配置文件读取选项,这样不用修改代码就能新增机器支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:30:57