自从我对 optparse 做任何事情以来已经有一段时间了,但我简要浏览了文档和一个旧程序。
“ -f/-s,-e/-d 是强制选项,但 -f&-s 不能一起使用,并且与 -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):
有关更多信息,请参阅optparse 如何处理错误部分。
“我如何使用 -w 选项(使用时)或 w/oa 值? ”
我从来没有想出一个方法来拥有一个 optparse 选项,它的值是可选的。AFAIK,您必须将选项设置为具有值或不具有值。我最接近的是为必须具有值的选项指定默认值。然后不必在命令行上指定该条目。示例代码:
parser.add_option("-w", help="warning", dest="warn", default=0)
附带一个(希望有帮助的)建议:
如果您看过文档,您确实看到了关于“强制选项”是如何矛盾的部分,对吧?;-p 除了幽默,您可能需要考虑重新设计界面,以便:
- 未使用“选项”输入所需信息。
- 只有一个参数(或一组参数)输入可能互斥的数据。换句话说,用“-e on”或“-e off”代替“-e”或“-d”。如果您想要“-v”表示详细,“-q”表示安静/详细关闭,您可以将值存储到一个变量中:
parser.add_option("-v", help="verbose on", dest="verbose", action="store_true")
parser.add_option("-q", help="verbose off", dest="verbose", action="store_false")
这个特定的例子是从处理布尔(标志)选项部分借用的(稍微扩展)。对于这样的事情,您可能还想查看“分组选项”部分;这个功能我没用过,就不多说了。