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

如何构建兼容argparse、runpy测试与sphinx-doc的__main__.py结构?

解决方案

调整代码结构,将核心执行逻辑封装为可调用的main()函数,同时保留if __name__ == "__main__"入口,既满足-m执行、runpy测试需求,又避免sphinxarg.ext生成文档时意外执行代码。

调整后的__main__.py示例

import argparse

def getparser():
    parser = argparse.ArgumentParser(description="小型模块的命令行工具")
    # 添加你的参数定义
    parser.add_argument("-v", "--verbose", action="store_true", help="启用详细输出")
    parser.add_argument("target", help="处理目标路径")
    return parser

def main(args=None):
    # 解析参数:若传入args则用测试参数,否则读取命令行参数
    parser = getparser()
    parsed_args = parser.parse_args(args)
    
    # 这里写你的核心业务逻辑
    if parsed_args.verbose:
        print(f"开始处理目标: {parsed_args.target}")
    # ... 其他逻辑

if __name__ == "__main__":
    # 正常通过`-m`执行时,自动调用main()
    main()

各场景适配说明

1. runpy测试

测试时无需依赖模块__name__是否为__main__,直接调用main()并传入测试参数即可:

# 测试代码示例
from mymodule.__main__ import main

# 传入模拟的命令行参数
main(["--verbose", "/test/path"])

# 或用runpy直接运行模块(此时模块__name__会被设为__main__,自动触发main())
import runpy
runpy.run_module("mymodule", run_name="__main__")

2. python -m执行

保持原有使用方式,直接运行:

python -m mymodule --verbose /actual/path

3. sphinxarg.ext生成文档

sphinxarg.ext仅会导入模块并调用getparser()来提取参数信息,不会进入if __name__ == "__main__"分支,因此核心逻辑不会被意外执行,完美适配文档生成需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:17:07