【问题标题】:python optparse treat next option as the option argument for the current one when it's missingpython optparse 在缺少时将下一个选项视为当前选项的选项参数
【发布时间】:2013-02-26 16:38:53
【问题描述】:

我使用 optparse 来解析我的脚本的命令选项。 我有 -f 和 -c 选项,它们都需要一个选项参数。但是当它丢失时,它会将下一个选项视为当前选项的选项参数。 例如

./myScript -f -c

这会将“-c”视为“-f”的选项参数,而不是抱怨“-f”和“-c”缺少选项参数。 对于其他正常情况,它工作正常。

感谢您提供任何信息和解决方案!

更新: 解决方案,通过使用argparse,可以避免这个问题。它退出并抱怨缺少选项参数。

【问题讨论】:

  • 您不使用argparse 是否有特定原因?如果你使用action kwarg,我相信argparse 会做你想做的事;像这样:parser.add_argument('-f',action='store_true')
  • 无任何特殊原因。我只是首先找到 optparse 。我刚刚尝试了 argparse,以这种方式使用选项时会显示错误。谢谢!
  • 注意:自 python 2.7 版起,不鼓励使用 optparse。 optparse 模块已弃用,不会进一步开发; argparse 模块将继续开发。请参阅PEP 0389 了解更多信息。

标签: python optparse


【解决方案1】:

optparse 从 python 2.7 开始被弃用,所以你应该使用 argparse 模块,它内置了这个行为:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-f')
parser.add_argument('-c')

parser.parse_args(['-f', 'f_val', '-c', 'c_val'])   #works as expected
parser.parse_args(['-f', '-c'])                     #errors as expected

如果您只剩下 python optparse 模块,您可以在解析阶段之后通过自定义检查轻松完成:

parser = OptionParser('usage')
parser.add_option("-f", "--ff", dest="f_value")
parser.add_option("-c", "--cc", dest="c_value")

(options, args) = parser.parse_args()

if options.f_value == '-c':
    print 'error: -f requires an argument'
    exit(1)

【讨论】:

  • 我知道它可以像这样解决,但我只是想知道我是否错过了在 optparse 模块中解决这个问题的东西。无论如何,谢谢
  • @nils optparse 没有此功能。我更新了我的答案以反映这一点
  • @nils 我更喜欢点赞而不是 thx(这都是关于声誉的):)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
相关资源
最近更新 更多