Python getopt() 在 __main__ 中

3 投票
2 回答
2649 浏览
提问于 2025-04-17 08:35

我是一名Python初学者,刚刚成功让我的第一个程序运行起来,并且可以接收命令行参数。在这个过程中,我得到了很多帮助,特别是来自这篇关于处理命令行选项的文章。

我想问的是:为什么在示例5.45中使用了一个单独的def main(argv),而不是直接在__main__里面调用try/except块呢?

示例5.45

def main(argv):                         
    grammar = "kant.xml"
    try:                                
        opts, args = getopt.getopt(argv, "hg:d", ["help", "grammar="]) 2
    except getopt.GetoptError:
        usage()
        sys.exit(2)                     

...

if __name__ == "__main__":
    main(sys.argv[1:])

希望有经验的Python高手能分享一下你们的见解。

谢谢大家 - Ashant

2 个回答

1

使用 main 函数的一个好处是,它让代码更容易重复使用:

import sys
import script

script.main(sys.argv[1:])
# or, e.g. script.main(['-v', 'file.txt']), etc

如果这个脚本被当作模块导入,那么脚本中 __main__ 块里的代码就不会被执行。所以,main 函数就像一个简单的接口,让你可以访问脚本的所有正常功能。通常,__main__ 块里只会包含对 main 的一次调用,还有一些其他不太重要的代码(比如测试代码)。

关于如何写一个好的 main 函数,Python 的作者提供了一些建议,可以在 这里 找到。

2

其实没有什么严格的技术原因,但通常大家会习惯性地把函数外面的代码写得尽量简短。具体来说,如果把代码放在模块的范围内,就会把grammaroptsargs这些变量变成全局变量,虽然它们其实只在主代码里用到。此外,使用一个专门的main函数可以让我们更简单地进行单元测试。

撰写回答