Answers:
从python开始2.7
,optparse
已弃用,希望将来会消失。
argparse
由于其原始页面(https://code.google.com/archive/p/argparse/)上列出的所有原因而更好:
+
和/
PEP 389中也提供了更多信息,它是将argparse
其纳入标准库的工具。
optparse
在PEP中提到“纯度”,然后再争论添加的复杂性,这听起来像是被编码为与岩石一样(较差)。
为什么要使用它代替optparse?是我应该知道的新功能吗?
我认为,@ Nicholas的答案可以很好地解决这一问题,但您不能从以下的“元”问题开始:
为什么还要创建另一个命令行解析模块?
将任何有用的模块添加到标准库中时,这就是两难的境地:当出现一种提供更好的,但向后不兼容的,提供相同功能的方法时,您该怎么办?
您要么坚持旧的,公认的超越方式(通常在谈论复杂的软件包时:异步,扭曲,tkinter,wx或Qt等),要么最终以多种不兼容的方式完成同一件事(XML与命令行解析器相比,恕我直言的解析器是一个更好的例子-但email
与处理类似问题的无数旧方法相比,程序包和它们之间的距离也不远;-)。
您可能会在文档中对过时的“过时”方式进行抱怨,但是(只要需要保持向后兼容性)就不能真正消除它们,而必须停止大型的重要应用程序迁移到较新的Python版本。
(第二个难题,与您的问题没有直接关系,总结成一句老话:“标准库是好的软件包将要消亡的地方……”每年约有一半的版本发布,但不是非常好的软件包,非常稳定,不需要经常发布的版本,实际上可能会因为在标准库中被“冻结”而遭受严重损失……但这确实是一个不同的问题)。
parser.add_argument('--long-opt', '-l',...)
;'-'易于处理,但是您喜欢。
添加Python原理的最佳来源是其PEP: PEP 389:argparse-新的命令行解析模块,尤其是标题为“ 为什么getopt和optparse不够?”的部分。
街上也有新孩子!
如果你需要一个更深入的比较,请阅读此,你可能最终使用docopt或点击。感谢Kyle Purdon!
起初,我像@fmark一样不愿意从optparse切换到argparse,因为:
然后我看到了这个文档,argparse胜过optparse,尤其是在谈论生成有意义的帮助消息时: http //argparse.googlecode.com/svn/trunk/doc/argparse-vs-optparse.html
然后我看到@Nicholas的“ argparse vs. optparse ”,说我们可以在python <2.7中使用argparse(是的,我以前不知道。)
现在,我的两个问题得到了很好的解决。我写这个希望是希望它可以帮助具有类似心态的其他人。