在argparse中混合位置参数和可选参数



我在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将是一个整数级别。

相关内容

  • 没有找到相关文章

最新更新