当我混合位置参数,可选参数和argparse
argparse.REMAINDER
遇到问题
parser = argparse.ArgumentParser()
parser.add_argument('verbose', action="store")
parser.add_argument('--config', '-c', nargs="?", dest="config_file")
parser.add_argument('--dry-run', action="store_true", dest="dryrun")
parser.add_argument('args', nargs=argparse.REMAINDER, action="store")
示例运行:
python test.py verose="5" --config config.xml graph --dry-run
预期产出:
verbose = "5"
config_file = config.xml
dryrun = True
args = ['graph']
实际输出:
verbose = "5"
config_file = config.xml
dryrun = False
args = ['graph', '--dry-run']
我的要求是verbose
,-c
,--config
和--dry-run
作为命令行选项,命令行提供的任何其他选项都应存储在列表中{ {1}}无论命令行中参数的出现顺序如何。
请帮助我做错了。
还有其他更好的python命令行解析器吗?
答案 0 :(得分:5)
我说你需要的配置是:
parser.add_argument('--verbose', action="store")
parser.add_argument('-c', '--config', nargs="?", dest="config_file")
parser.add_argument('--dry-run', action="store_true", dest="dryrun")
parser.add_argument('args', nargs='*')
我认为你给出的“REMAINDER”参数具体告诉argparse模块在args中获取其余的参数,当它找到第一个与其余参数不匹配的参数时。
如果你想要args
使用'*'的0个或多个参数,如果你想要至少1个arg,请使用'+'作为nargs
参数。
除此之外,我建议使用argparse documentation,因为已经有很多可能已经解析了所需的类型(例如int或file参数)。
在免费的Aptana Studio中创建一个CLI-argparse
模块为argparse提供了一个很好的包装器,其中已经设置了一些标准参数(如verbose)。在这种情况下,详细将是一个整数级别。