我注意到 Python 2.7 文档还包含另一个命令行解析模块。除了getopt
和optparse
我们现在有argparse
。
为什么还要创建另一个命令行解析模块?为什么我应该使用它而不是optparse
?是否有我应该了解的新功能?
我注意到 Python 2.7 文档还包含另一个命令行解析模块。除了getopt
和optparse
我们现在有argparse
。
为什么还要创建另一个命令行解析模块?为什么我应该使用它而不是optparse
?是否有我应该了解的新功能?
从 python 开始2.7
,optparse
已弃用,并有望在未来消失。
argparse
由于其原始页面( https://code.google.com/archive/p/argparse/ )上列出的所有原因而更好:
+
和/
更多信息也在PEP 389中,这是将argparse
其纳入标准库的工具。
为什么我应该使用它而不是 optparse?我应该知道他们的新功能吗?
@Nicholas 的回答很好地涵盖了这一点,我认为,但不是你开始的更多“元”问题:
为什么还要创建另一个命令行解析模块?
这是将任何有用的模块添加到标准库时的第一个难题:当出现提供相同功能的更好但向后不兼容的方式时,您会怎么做?
要么您坚持使用旧的且公认已被超越的方式(通常当我们谈论复杂的包时:asyncore vs twisted,tkinter vs wx 或 Qt,...),要么您最终会以多种不兼容的方式来做同样的事情(XML解析器,恕我直言,是一个比命令行解析器更好的例子——但email
包与处理类似问题的无数旧方法也相距不远;-)。
您可能会在文档中对“已弃用”的旧方式发出威胁性的抱怨,但是(只要您需要保持向后兼容性)如果不阻止大型、重要的应用程序迁移到较新的 Python 版本,您就无法真正将它们删除。
(困境之二,与您的问题没有直接关系,用一句老话“标准库是好包死去的地方”进行了总结......每年半年左右发布一次,包不是很好,非常稳定,不需要比这更频繁的发布,实际上可能会因在标准库中“冻结”而遭受重大损失......但是,这确实是一个不同的问题)。
添加 Python 的最佳理由是它的 PEP:PEP 389: argparse - New Command Line Parsing Module,特别是标题为“为什么 getopt 和 optparse 不够?
起初我和@fmark 一样不愿意从 optparse 切换到 argparse,因为:
然后我看到了这个文档,argparse 优于 optparse,尤其是在谈论生成有意义的帮助消息时: http: //argparse.googlecode.com/svn/trunk/doc/argparse-vs-optparse.html
然后我看到@Nicholas 的“ argparse vs. optparse ”,说我们可以在 python <2.7 中使用 argparse(是的,我以前不知道。)
现在我的两个问题得到了很好的解决。我写了这篇文章,希望它能帮助其他有类似心态的人。