如果某个地方已经回复了,请提前向您道歉;我从上个小时起就一直在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和-s不能一起使用,与-e和-d选项相同-不能一起使用。我怎样才能把支票放在适当的位置呢?
另一个问题,如果我可以同时问:我如何使用-w选项(当使用时)与或没有一个值?如果未提供任何值,则应采用默认值,否则将采用提供的值。非常感谢您的帮助。干杯!!
发布于 2011-07-13 05:22:37
我已经有一段时间没有使用optparse做任何事情了,但我简要地浏览了一下docs和一个旧程序。
-f/-s、-e/-d是必需选项,但-f&-s不能与-e&-d选项一起使用,也不能与-e&-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)附带一个(希望有帮助的)建议的旁白:
如果你看过文档,你确实看到了关于“强制选项”是一个矛盾修饰法的部分,对吗?除了幽默,你可能想要考虑重新设计界面,以便:
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部分;我还没有使用过这个特性,所以就不多说了。
发布于 2011-07-13 03:52:48
如果您使用的是2.7+,则应该尝试使用argparse。This section应该是您想要的。
Tl;dr:
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互斥。有关使用ArgumentParser的更多信息,请参阅详细的argparse用法
请记住,optparse已被弃用,因此使用argparse不失为一个好主意。
https://stackoverflow.com/questions/6669828
复制相似问题