我想以各种方式传递参数:
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
这可能吗?
答案 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。不幸的是,定位总是被认为是必需的,因此如果您不希望用户在指定给定选项时使用它们,则必须手动检查它们(但我相信在这种情况下,您的命令提供了错误的接口)