python - optparse() : Input validation

标签 python validation optparse

如果已经在某处回答,我提前道歉;自上一小时以来,我一直在 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/

相关文章:

c# - 如果验证方法应该返回验证结果,为什么会有 ArgumentException 类?

javascript - 使用 getElementById 验证函数

javascript - 如何在使用 ng-repeat 时验证 AngularJs 中的表单

python - 理解 OptionParser

python - optparse:没有选项字符串

python - `_ast` 中导入函数的名称

python - Django - Mac 开发,环境 hell

Python - 创建直方图

带有命令行参数的 R optparse 错误

python - 删除字符串数字之间的空格