参数解析:格式化参数



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

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

我尝试过使用子解析器,但我可以用

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

这可能吗?

我认为你不需要子解析器。像这样的东西应该没问题:

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提供一个互斥组。不幸的是,位置始终被认为是必需的,因此如果您不希望用户在指定给定选项时使用它们,则必须手动检查它们(但是我相信在这种情况下,您的命令界面不好)。

argparse.add_argument中,您可以提供参数文本,而不是字符串,而是字符串列表,因此具有相同参数的多种形式。仔细浏览 argparse 文档 - 这个模块可以做你需要的一切。

一个具有两个类型为 intoptionals的解析器,以及一个带有 nargs='*‘positional,将接受您的 3 个输入。您对输入还有其他限制吗?

最新更新