Python 多入口脚本的组织方式

多个 if name == "__main__" 不能共存,python 只执行最后一个;正确做法是统一入口、封装函数并用 argparse 或环境变量分发,或通过 setuptools entry_points 管理多命令。

多个 if __name__ == "__main__" 怎么共存

不能共存,Python 解释器只认最后一个。常见错误是复制粘贴不同脚本时各自保留了 if __name__ == "__main__" 块,结果只有末尾那个生效,前面的逻辑彻底静默。

正确做法是统一入口:把所有主逻辑封装成函数,比如 main_cli()main_worker()main_dev(),然后在单个 if __name__ == "__main__" 里用 sys.argvargparse 分发:

if __name__ == "__main__":
    import sys
    if len(sys.argv) > 1 and sys.argv[1] == "worker":
        main_worker()
    elif len(sys.argv) > 1 and sys.argv[1] == "dev":
        main_dev()
    else:
        main_cli()
  • 别用 os.system("python script2.py") 启动另一个入口——进程隔离、参数传递麻烦、异常难捕获
  • argparse 比手动查 sys.argv 更健壮,尤其要支持 --help 和子命令时
  • 如果入口差异大(比如一个跑 HTTP 服务,一个跑定时任务),建议拆成独立脚本文件,而非硬塞进一个文件

setuptoolsentry_points 管多个命令

这是发布级组织方式,适合打包后通过命令行直接调用,比如 mytool climytool sync。核心是 setup.pypyproject.toml 里声明 entry_points

pyproject.toml 中写:

[project.entry-points."console_scripts"]
mytool-cli = "mytool.cli:main"
mytool-sync = "mytool.sync:main"
mytool-clean = "mytool.utils:clean_cache"
  • 每个值格式必须是 "模块路径:可调用对象名",中间冒号不能漏,也不能多空格
  • 模块路径从包根开始算,不是相对路径;确保该模块能被 Python 正常 import(即有 __init__.py 或符合 PEP 420)
  • pip install -e . 后命令才可用;不加 -e 就得先 pip install . 再测试
  • Windows 上偶尔因 shebang 或路径缓存导致新命令不生效,可删掉 %USERPROFILE%\AppData\Roaming\pip\pip.ini 或重启终端

同一个脚本里混用 click 和原生 argparse

别混。两者都试图接管 sys.argv 解析和帮助输出,叠加会导致参数错乱、--help 重复打印、子命令注册失败等现象,错误信息往往不明确,比如 unrecognized arguments: --help 却又没提示可用选项。

eSiteGroup站群管理系统1.0.4

eSiteGroup站群管理系统是基于eFramework低代码开发平台构建,是一款高度灵活、可扩展的智能化站群管理解决方案,全面支持SQL Server、SQLite、MySQL、Oracle等主流数据库,适配企业级高并发、轻量级本地化、云端分布式等多种部署场景。通过可视化建模与模块化设计,系统可实现多站点的快速搭建、跨平台协同管理及数据智能分析,满足政府、企业、教育机构等组织对多站点统一管控的

下载

选一个到底:

  • 简单场景(1–2 个开关参数)用原生 argparse,零依赖,启动快
  • 需要子命令、选项分组、类型自动转换、颜色帮助页,就用 click;它对多入口更友好,@click.group() 天然支持 mytool db migrate 这种嵌套调用
  • 如果已有 argparse 脚本想升级为多命令,不要强行套 click,而是把各子命令逻辑抽成函数,再用 click.group() 包一层,而不是保留旧的 ArgumentParser 实例

调试时怎么快速切换不同入口而不改代码

靠环境变量或临时配置最稳。硬编码判断 sys.argv 在 IDE 里调试不方便,每次都要改运行参数;而环境变量可以全局设置一次,所有入口都读取。

例如在脚本开头加:

import os
ENTRY_POINT = os.getenv("MYTOOL_ENTRY", "cli")

然后在 if __name__ == "__main__" 里根据 ENTRY_POINT 分发。调试时只需在 IDE 的 Run Configuration 里设环境变量,或终端里:

MYTOOL_ENTRY=worker python mytool/__main__.py
  • 避免用文件存在与否判断入口(如 if os.path.exists("dev.flag")),容易误提交、权限出问题、CI 环境不一致
  • 别用 __file__ 名称匹配来区分入口,重命名脚本就失效,且无法支持 entry_points 安装后的调用
  • 如果入口间共享大量初始化逻辑(如日志配置、DB 连接),把这些提前抽到单独函数,所有入口都先调用它,而不是复制粘贴

多入口真正的复杂点不在写法,而在状态隔离——比如一个入口开了全局线程池,另一个入口又去关它,或者两个入口同时读写同一份缓存文件。这种问题不会报错,但会悄悄破坏行为一致性。

相关推荐:

追剧喵网页版入口

追剧喵app提供了免费的影视追剧体验。汇集了国内外各种流行电影和电视节目,用户可以通过标签对电影进行分类来快速搜索,为用户提供更舒适的观看体验,免费内容的免费播放,以及免费流畅的观看。 追剧喵网页版入口: 追剧喵官方版下载:点此下载 软件亮点 1、查看记录:自动记录您观看的位置,再次观看并继续。 2、支持动画系列和续集,每周更新,这样你就不用再担心错过激动人心的故事情节了。 3、添加社交功能,如聊...

沪学习官网入口

沪学习是一款上海中小学在线学习平台,在这里为广大的用户提供了全学科的数字课本,优质的线上辅导培训,并且还有各种丰富的教学资源,和专业的教师在线解答,最大化的满足学生们的需求,用户可以方便管理学习进度,同时可以和学习伙伴交流、分享学习经验。 沪学习官网入口: 沪学习app官方下载:点此下载 软件亮点 1、同步教材:全面覆盖上海当地中小学所有学科教材,内容与课堂教学进度高度一致。 2、专家讲座:汇聚上...

毒蘑菇volumeshader性能测试入口最新版

毒蘑菇volumeshader怎么打开?volumeshader俗称“毒蘑菇测试”,这是一款基于WebGL的在线GPU性能测试工具。很多用户想要用其测试手机电脑性能,下面给大家带来了毒蘑菇volumeshader性能测试入口最新版,一起来看看吧! 毒蘑菇volumeshader性能测试入口最新版 原版项目地址为: https://cznull.github.io/vsbm 镜像站: https:/...

小猿搜题网页版入口

小猿搜题下载是一款非常优秀的学习教育软件,涵盖了各种年级和学习的题库,随时随地让用户自由选择练习,还能实时更新各种学习资料和课程,轻松帮助用户在线提升学习成绩,给用户带来全面的学习服务和体验,还提供详细的题库解析和视频,自由提升用户的学习效率。 小猿搜题官网在线搜题: 小猿搜题网页版入口:点此进入 小猿搜题官网下载:点此下载 软件功能 1、在线教学:软件提供大量涵盖从小学到高中各个学科的在线课程,...

毒蘑菇显卡测试网站入口

Volume Shader BM毒蘑菇是一个集炫酷视觉与高强度压力测试于一体的免费在线工具,能让你快速了解自己设备的图形性能上限。下面给大家带来毒蘑菇显卡测试网站入口,Volumeshader_bm显卡测试链接地址分享,大家找不到入口的可来看看! 毒蘑菇显卡测试网站入口 原版项目地址为: https://cznull.github.io/vsbm 镜像站: https://toolwa.com/v...

volumeshaderbm测试入口网址

Volume Shader BM 是一款基于浏览器的在线 GPU 性能测试工具,通过渲染复杂的 3D 体积分形来压测显卡。其测试入口有多个:原版项目地址为 https://cznull.github.io/vsbm;此外还有 https://vsbm.wwwnav.com、https://volumeshader.online及 https://www.volume-shader.org等多个网站...

毒蘑菇手机cpu性能测试链接入口

Volume Shader BM(俗称“毒蘑菇测试”)是一款基于WebGL的开源浏览器GPU基准测试工具。它通过在浏览器中实时渲染一个复杂的3D分形图形,来对设备的图形处理器(GPU)进行高强度的压力测试。下面为大家带来了毒蘑菇手机cpu性能测试链接入口分享! 毒蘑菇手机cpu性能测试链接入口 原版项目地址为: https://cznull.github.io/vsbm 镜像站: https://...

volumeshader毒蘑菇测试入口链接2026

volumeshader毒蘑菇测试怎么进?“毒蘑菇测试”(Volume Shader BM)是一款基于 ‌WebGL‌ 技术的在线 GPU 压力测试工具。它通过渲染复杂的体积云着色器,对显卡进行高负载渲染测试,主要用于快速验证显卡性能、稳定性以及浏览器硬件加速效果。下面给大家带来了Volumeshader毒蘑菇测试入口链接2026。 volumeshader毒蘑菇测试入口链接2026 1、访问网址...