如果它已经在某个地方得到了解答,我会提前道歉;自上个小时以来我一直在python网站。但是我没弄明白我怎么能这样做。我的脚本应该采用这样的选项:
myScript.py -f <file-name> -e [/ -d]
myScript.py -s <string> -e [/ -d]
myScript.py -f <file-name> [/ -s <string>] -e -w [<file_name>]
即。 -f
/ -s
,-e
/ -d
是强制性选项,但-f
&amp; -s
不能与{-e
一起使用1}}&amp; -d
选项 - 不能一起使用。我怎样才能把支票放到位?
另一个问题,如果我可以同时询问:我如何使用-w
选项(使用时)或没有值?如果没有提供任何值,则应采用默认值,否则为提供的值。
任何帮助非常感谢。干杯!!
答案 0 :(得分:2)
如果您使用的是2.7+,则应尝试使用argparse
。
This section应该是你想要的。
Tl;博士:
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument('--foo', action='store_true')
group.add_argument('--bar', action='store_false')
使--foo
和--bar
相互排斥。有关使用argparse
s
ArgumentParser
用法
请注意,optparse
已被弃用,因此无论如何使用argparse
都是个好主意。
答案 1 :(得分:2)
我用optparse做了一段时间,但我简要介绍了docs和一个旧程序。
“ -f / -s,-e / -d是强制性选项,但-f&amp; -s不能一起使用,与-e&amp; -d选项相同 - 不能一起使用。怎么能我把检查放到了位置?“
对于互斥性,您必须自己进行检查,例如:
parser.add_option("-e", help="e desc", dest="e_opt", action="store_true")
parser.add_option("-d", help="d desc", dest="d_opt", action="store_true")
(opts, args) = parser.parse_args()
if (parser.has_option("-e") and parser.has_option("-d")):
print "Error! Found both d and e options. You can't do that!"
sys.exit(1)
由于这里的示例选项是布尔值,您可以将上面的if行替换为:
if (opts.e_opt and opts.d_opt):
有关详情,请参阅How optparse handles errors部分。
“如何使用-w选项(使用时)或没有值?”
我从来没有找到一种方法来获得一个optparse选项,其值是,可选的。 AFAIK,您必须将选项设置为具有值或没有值。我最接近的是为必须具有值的选项指定default value。然后,不必在命令行上指定该条目。示例代码:
parser.add_option("-w", help="warning", dest="warn", default=0)
抛开一个(希望是有帮助的)建议:
如果你看过这些文档,你确实看到了关于“强制性选项”是一个矛盾的部分,对吗? ; -p除了幽默之外,您可能需要考虑重新设计界面,以便:
parser.add_option("-v", help="verbose on", dest="verbose", action="store_true")
parser.add_option("-q", help="verbose off", dest="verbose", action="store_false")
这个特例是从Handling boolean (flag) options部分借来的(略有扩展)。对于这样的事情,您可能还想查看Grouping Options部分;我没有使用过这个功能,所以不会多说一些。