3

当我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-runas 命令行选项,并且命令行提供的任何其他选项都应该存储在列表中,args而不管命令行中参数的出现顺序如何。请帮助我做错了什么。还有其他更好的python命令行解析器吗?

4

1 回答 1

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 中获取其余参数,当它发现第一个参数无法与其余参数匹配时。

如果你想要 0 个或多个参数来args使用 '*',如果你想要至少 1 个 arg 使用 '+' 作为nargs参数。

除此之外,我会推荐argparse 文档,因为有很多可能性已经用所需的类型(例如 int 或文件参数)进行解析。此外,在免费的 Aptana Studio 中创建一个CLI-argparse模块为 argparse 提供了一个很好的包装器,其中已经设置了一些标准参数(如详细)。在这种情况下,详细将是一个整数级别。

于 2013-03-23T06:03:23.053 回答