首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >optparse():输入验证

optparse():输入验证
EN

Stack Overflow用户
提问于 2011-07-13 03:21:06
回答 2查看 3.7K关注 0票数 3

如果某个地方已经回复了,请提前向您道歉;我从上个小时起就一直在python网站上。但是我不知道我该怎么做。我的脚本应该采用如下选项:

代码语言:javascript
复制
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选项(当使用时)与或没有一个值?如果未提供任何值,则应采用默认值,否则将采用提供的值。非常感谢您的帮助。干杯!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-13 05:22:37

我已经有一段时间没有使用optparse做任何事情了,但我简要地浏览了一下docs和一个旧程序。

-f/-s、-e/-d是必需选项,但-f&-s不能与-e&-d选项一起使用,也不能与-e&-d选项一起使用。如何进行检查?

为了互斥,你必须自己做检查,例如:

代码语言:javascript
复制
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行替换为:

代码语言:javascript
复制
if (opts.e_opt and opts.d_opt):

有关更多信息,请参阅How optparse handles errors小节。

“如何将-w选项(使用时)与值一起使用或不与值一起使用?”

我从来没有想出一种方法来让optparse选项的值是可选的。AFAIK,您必须将该选项设置为有值或无值。我遇到的最接近的情况是为必须有值的选项指定一个default value。这样就不必在命令行中指定该条目。示例代码:

代码语言:javascript
复制
parser.add_option("-w", help="warning", dest="warn", default=0)

附带一个(希望有帮助的)建议的旁白:

如果你看过文档,你确实看到了关于“强制选项”是一个矛盾修饰法的部分,对吗?除了幽默,你可能想要考虑重新设计界面,以便:

  • 所需信息不是使用“option”输入的。
  • 只有一个参数(或一组参数)输入的数据可能是互斥的。换句话说,不是"-e“或"-d",而是"-e on”或"-e off“。如果您希望"-v“代表详细,"-q”代表安静/详细关闭,您可以将这些值存储到一个变量中:

代码语言:javascript
复制
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部分;我还没有使用过这个特性,所以就不多说了。

票数 2
EN

Stack Overflow用户

发布于 2011-07-13 03:52:48

如果您使用的是2.7+,则应该尝试使用argparseThis section应该是您想要的。

Tl;dr:

代码语言:javascript
复制
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不失为一个好主意。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6669828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档