为什么要使用 def main(argv=[__name__]) 和 if __name__ == "__main__": sys.exit(main(sys.argv))?

26 浏览
0 Comments

为什么要使用 def main(argv=[__name__]) 和 if __name__ == "__main__": sys.exit(main(sys.argv))?

我正在使用/重写一段代码,首先将函数定义如下:

def main(argv=[__name__]):
    ...
    *rest of code*
    ...

以以下方式结束:

if __name__ == "__main__":
    sys.exit(main(sys.argv))

我认为它所做的是检查脚本是否正在从命令行执行,并在退出python时使用提供的参数运行函数main。但是,为什么需要将变量argv预设为[__name__]在函数定义中呢?这不是我的代码,所以我不知道原始意图。然而,我对使用if __name__ == \"__main__\":进行检查命令行执行的方法还不熟悉,因此可能存在一些我忽略的明显原因。如果能提供帮助或更多关于main函数定义和参数/命令行对模块测试的详细信息,将不胜感激。

admin 更改状态以发布 2023年5月24日
0
0 Comments

main()定义允许main()以其他方式被调用,而不仅仅是在文件底部的sys.exit()行。这可能是防御式编程的一个例子,也可能表示支持此文件的其他用途。

其中一种支持的其他用途可能是从另一个Python程序中调用它,就像这样:

import your_module
your_module.main()

0
0 Comments

关于argv=[__name__],原始开发者可能想保留不从命令行运行该函数的选项(即由另一个模块调用),并提供了__name__,因为它使用sys.argv[0]来实现某些功能。\n\nmain函数与Python没有任何关系,只是一些约定(来自像C这样的语言)。sys.exit(main(sys.argv))将使用接收到的命令行参数运行main函数的乘积触发sys.exit函数,退出码相当于该乘积。main可能应该返回适当的退出码(0表示正常,其他表示不同的异常)。

0