如果已经在某处回答,我提前道歉;自上一小时以来,我一直在 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
选项(当使用时)有或没有值?当没有提供值时,它应该采用默认值,否则提供的值。
非常感谢任何帮助。干杯!!
最佳答案
自从我对 optparse 做任何事情以来已经有一段时间了,但我简要浏览了 docs和一个旧程序。
"-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)
由于此处的示例选项是 bool 值,您可以将上面的 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 除了幽默,您可能需要考虑重新设计界面,以便:
- 未使用“选项”输入所需信息。
- 只有一个参数(或一组参数)输入可能互斥的数据。换句话说,不是“-e”或“-d”,而是“-e on”或“-e off”。如果你想要像“-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")
此特定示例是从 Handling boolean (flag) options 部分借用的(略有扩展) .对于这样的事情,您可能还想查看 Grouping Options部分;这个功能我没用过,就不多说了。
关于python - optparse() : Input validation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6669828/