Argparse:格式化参数

时间:2014-04-01 05:28:37

标签: python argparse

我想以各种方式传递参数:

python abc.py 1 2
python abc.py -d 3 
python abc.py -c 6

我尝试过subparsers,但我可以用

python abc.py def 1 2
python abc.py spec -d 3
python abc.py spec -c 6

这可能吗?

3 个答案:

答案 0 :(得分:0)

argparse.add_argument中,您可以不将参数文本作为字符串提供,而是作为字符串列表提供,因此具有相同参数的多种形式。 仔细浏览argparse docs - 该模块可以完成您所需的一切。

答案 1 :(得分:0)

两个optionals类型int和一个positional nargs='*‘的解析器会接受您的3个输入。你对输入有任何限制吗?

答案 2 :(得分:0)

在你的情况下,我认为你不需要subparser。这样的事应该没问题:

import argparse


parser = argparse.ArgumentParser()
parser.add_argument('-d', type=int, nargs='?')
parser.add_argument('-c', type=int, nargs='?')
parser.add_argument('args', type=int, nargs='*')

print(parser.parse_args())

结果是:

$python3 test_argparse.py 1 2                                                 
Namespace(args=[1, 2], c=None, d=None)                                                                           
$python3 test_argparse.py -d 3
Namespace(args=[], c=None, d=3)
$python3 test_argparse.py -c 6
Namespace(args=[], c=6, d=None)

如果您希望选项互斥argparse,则提供mutually exclusive group。不幸的是,定位总是被认为是必需的,因此如果您不希望用户在指定给定选项时使用它们,则必须手动检查它们(但我相信在这种情况下,您的命令提供了错误的接口)