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

标签 python command-line sys

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

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

并以以下内容结尾:

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

我的印象是,它所做的是检查以确保脚本是从命令行执行的,然后使用退出时提供的参数运行函数 main Python。那么,为什么需要在函数定义中将变量argv预设为[__name__]呢?这不是我的代码,所以我不知道这背后的初衷。然而,我不熟悉使用 if __name__ == "__main__": 行来抽查命令行执行,所以也许我缺少这种语法的一些明显的原因。任何帮助或有关 main 函数定义和参数/命令行与模块测试的进一步详细信息将不胜感激。

最佳答案

至于argv=[__name__],原始开发人员可能希望保留不从命令行运行此函数的选项(即由另一个模块调用),并提供 __name__ 因为它使用 sys.argv[0] 来实现某些功能。

main 函数与 python 无关,只是一些约定(源自 C 等语言)。 sys.exit(main(sys.argv)) 将触发 sys.exit 函数,其退出代码相当于运行 main 的结果> 带有接收到的命令行参数的函数。 main 可能应该返回适​​当的退出代码(0 表示 OK,其他表示各种异常)。

关于python - 为什么 def main(argv=[__name__]) 和 if __name__ == "__main__": sys. exit(main(sys.argv)) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41473945/

相关文章:

python - 从 tensorflow 模型中获取权重

python - 基于前一行的 Pandas 数据框列

python - 将python中的reader输入读取到字符串中

python - 如何在 python 中将列表列表(列表)转换为 json 数组?

Python Flask 服务器在对特定端点 : 的 GET 请求时崩溃

command-line - Windows 10 : apply theme programmatically

linux - 使用命令行输入参数

python - 在 python 中运行复杂的命令行

python - 如何通过按键 "continue"或 "exit"程序

python - 如何提取 zip 文件夹中的文件?