在python中排序/短路getopt标志

时间:2017-09-11 17:16:07

标签: python arguments getopt

我有一个简单的命令行应用程序,我正在扩展。它目前支持几个命令行参数:

try:
    opts, args = getopt.getopt(sys.argv[1:], 'b:h',
                               ['battle=', 'help'])
except getopt.GetoptError:
    usage()
    raise

# Parse opts/args.
for opt, arg in opts:
    if opt in ('-h', '--help'):
        usage()
    elif opt in ('-b', '--battle'):
        battle = True

我将不得不添加许多额外的命令行参数。我将实现它的方式,我将不得不跟踪用户可以设置的每个标志的“设置”标志。

在某些情况下,我希望“解密”我的解析器,例如,如果用户使用-x-y-z标记运行它,告诉解析器跳过所有剩余的解析操作,然后运行一个特定的函数。但是,这将is x,y,z set检查每个选项。

  1. 是否有“pythonic”方法通过允许我“短路”某些解析操作来简化解析?
  2. 是否可以通过对opt和arg进行排序来保证我将按特定顺序解析标志/选项?

1 个答案:

答案 0 :(得分:1)

使用getopt是一项艰难的要求吗?可以说,更“pythonic”的方法是使用argparse,一个更简单,更高级别的模块。在这种情况下,您可以将argparser定义为:

parser = argparse.ArgumentParser()
parser.add_argument("-x", ...)
parser.add_argument("-y", ...)
parser.add_argument("-z", ...)

args = parser.parse_args()
if args.x and args.y and args.z:
    short_circuit()

对于您的第二个问题,我认为使用argparse将无需担心解析顺序,因为您从args对象中按名称调用每个arg。