fma*_*ark 275 python command-line getopt optparse argparse
我注意到Python 2.7文档包含另一个命令行解析模块.除了getopt和optparse我们现在有argparse.
为什么还创建了另一个命令行解析模块?我为什么要用它而不是optparse?是否有我应该了解的新功能?
Nic*_*ght 308
截至python 2.7,optparse已被弃用,并有望在将来消失.
argparse最好是因为其原始页面上列出的所有原因(https://code.google.com/archive/p/argparse/):
+和/更多信息也在PEP 389中,它是将argparse其作为标准库的载体.
Ale*_*lli 60
我为什么要使用它而不是optparse?他们应该了解他们的新功能吗?
我想,@ Nicholas的回答很好地涵盖了这个问题,但不是你开始的更"元"问题:
为什么还创建了另一个命令行解析模块?
当任何有用的模块被添加到标准库时,这就是第一个困境:当提供相同类型的功能时出现了一种更好但又向后兼容的方式,你会怎么做?
要么你坚持旧的和公认的超越方式(通常当我们谈论复杂的包:asyncore vs twisted,tkinter vs wx或Qt,...)或者你最终有多种不兼容的方式来做同样的事情(XML解析器,恕我直言,这是一个比命令行解析器更好的例子 - 但是email程序包与处理类似问题的无数旧方法也不是太远;-).
您可能会在文档中提出关于旧方法被"弃用"的威胁抱怨,但是(只要您需要保持向后兼容性),如果不阻止大型重要应用程序迁移到较新的Python版本,您就无法将它们带走.
(困难的第二,与你的问题没有直接关系,在旧的说法中总结出来"标准库是好包装去死的地方"......每年都有一半左右的发布,包装不是很好,非常稳定,不需要经常发布,实际上可能会因为在标准库中"冻结"而遭受严重影响......但是,这确实是一个不同的问题).
lon*_*ony 16
街区还有新的孩子!
如果您需要更深入的比较,请阅读此内容,您最终可能会使用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(是的,我以前不知道。)
现在我的两个担忧得到了很好的解决。我写这篇文章希望它能帮助其他有类似心态的人。