Sort/short-circuit python 中的 getopt 标志
Sort/short-circuit getopt flags in python
我有一个简单的 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
检查每个选项。
- 是否有 "pythonic" 方法允许我 "short circuit" 某些解析操作来简化解析?
- 是否可以 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
对象中按名称调用每个参数。
我有一个简单的 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
检查每个选项。
- 是否有 "pythonic" 方法允许我 "short circuit" 某些解析操作来简化解析?
- 是否可以 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
对象中按名称调用每个参数。