Python optparse、默认值和显式选项
采用以下相当标准的代码:
from optparse import OptionParser
opts = OptionParser()
opts.add_option('-f', action="store_true")
opts.add_option("-x", dest="x", type="int", default=1)
options, args = opts.parse_args()
假设 -x
和 -f
是互斥的:当 -x
和 -f 都明确存在,则应报告错误。
如何检测 -x
是否显式存在?即使不是,options
也会列出默认值。
一种方法是避免设置默认值,但我宁愿不这样做,因为 --help
可以很好地打印默认值。
另一种方法是检查 sys.argv
中是否有 -x
的实例,如果 -x
有多个名称,这也有点尴尬> (即 --long-name)并且有不止一对互斥的选项。
有一个优雅的解决方案吗?
Take the following rather standard code:
from optparse import OptionParser
opts = OptionParser()
opts.add_option('-f', action="store_true")
opts.add_option("-x", dest="x", type="int", default=1)
options, args = opts.parse_args()
Assume that -x
and -f
are mutually exclusive: when -x
and -f
are both explicitly present, an error should be reported.
How do I detect if -x
is present explicitly? Even if it is not, options
list the default value.
One way would be to avoid setting the default value which I rather won't do because --help
prints default values nicely.
Another way would be checking sys.argv
for instances of -x
which is a bit awkward, too, if there's more than one name for -x
(that is, a --long-name) and there's more than one pair of mutually exclusive options.
It there an elegant solution for this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用回调通过
optparse
来完成此操作。从您的代码构建:现在我们将此脚本称为
op.py
。如果我执行 python op.py -x 1 -f ,响应是:You can accomplish this with
optparse
using a callback. Building from your code:Let's call this script
op.py
for now. If I dopython op.py -x 1 -f
, the response is:使用 argparse。有一个互斥组部分:
optparse 无论如何已被弃用。
Use argparse. There's a section for mutually exclusive groups:
optparse is deprecated anyway.