__main__ 中的 Python getopt()

发布于 2024-12-21 13:23:27 字数 701 浏览 1 评论 0原文

我是一名 Python 初学者,并且已经成功地获得了我的第一个程序,并传入了 CLI 参数来运行。从此处理命令行选项获得了很多帮助。

我的问题是:为什么在示例 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的人能够分享你的智慧。

TIA- 阿尚特

I'm a Python beginner and have successfully gotten my first program with CLI parameters passed in to run. Got lots of help from this Handling command line options.

My question is: Why in Example 5.45 a separate def main(argv) has been used, instead of calling the try/except block within __main__ itself.

Example 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:])

Hope someone versed in Python could share your wisdom.

TIA -
Ashant

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不再让梦枯萎 2024-12-28 13:23:27

没有严格的技术原因,但保持函数外部的代码尽可能短是相当惯用的。具体来说,将代码放入模块作用域会将变量 grammaroptsargs 转换为全局公共变量,即使它们只是必需的在主代码里面。此外,使用专用的 main 函数可以简化该函数的单元测试。

There is no strict technical reason, but it is quite idiomatic to keep the code outside functions as short as possible. Specifically, putting the code into the module scope would turn the variables grammar, opts and args into global public variables, even though they are only required inside the main code. Furthermore, using a dedicated main function simplifies unit-testing this function.

魂ガ小子 2024-12-28 13:23:27

使用 main 函数的优点之一是它可以轻松地重用代码:

import sys
import script

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

如果将脚本的 __main__ 块中的任何代码导入为模块。因此,main 函数充当一个简单的接口,提供对脚本的所有正常功能的访问。然后,__main__ 块通常只包含对 main 的单个调用,以及任何其他非必要代码(例如测试)。

Python 作者关于如何编写良好的 main 函数的一些提示可以在 这里

One advantage of using a main function is that it allows for easy code re-use:

import sys
import script

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

Any code in the script's __main__ block won't be run if it is imported as a module. So the main function acts as a simple interface providing access to all the normal functionality of the script. The __main__ block will then usually contain just a single call to main, plus any other non-essential code (such as tests).

Some tips from the author of Python on how to write a good main function can be found here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文