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

时间:2013-03-23 05:54:54

标签: python 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 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命令行解析器吗?

1 个答案:

答案 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)。在这种情况下,详细将是一个整数级别。