Sort/short-circuit python 中的 getopt 标志

Sort/short-circuit getopt flags in python

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

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

我将不得不添加大量额外的命令行参数。我将实施它的方式是,我必须跟踪用户可以设置的每个标志的 "is set" 标志。

在某些情况下,我想 "short circuit" 我的解析器,例如,如果用户 运行 它同时具有 -x-y-z 标志,告诉解析器跳过所有剩余的解析操作,只 运行 一个特定的函数。但是,这将 is x,y,z set 检查每个选项。

  1. 是否有 "pythonic" 方法允许我 "short circuit" 某些解析操作来简化解析?
  2. 是否可以 gua运行tee 我将通过排序 opt 和 arg 以特定顺序解析 flags/opts?

使用 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 对象中按名称调用每个参数。