我在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 verbose="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
作为命令行选项,命令行提供的任何其他选项应存储在列表args
中,无论命令行参数的出现顺序如何。请帮助我哪里做错了。还有其他更好的python命令行解析器吗?
我认为你需要的配置是这样的:
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个或多个参数,请使用'*',如果你想为nargs
设置至少1个参数,请使用'+'。
除此之外,我建议使用argparse文档,因为已经有很多可能性可以使用所需的类型进行解析(例如int或file参数)。另外,在免费的Aptana Studio中创建CLI-argparse
模块为argparse提供了一个很好的包装器,其中已经设置了一些标准参数(如verbose)。在这种情况下,Verbose将是一个整数级别。