不允许多次使用标志

问题描述 投票:0回答:2

我有一个名为script.py的python脚本,它具有两个可选参数(-a,-b),并且具有一个接受文件或使用stdin的单个位置参数。我想这样做,以使标记/文件不能多次使用。因此,不允许这样的事情

./script.py -a 5 -a 7 test.txt
./script.py -a 5 test1.txt test2.txt

我有办法吗?我一直在通过argparse(https://docs.python.org/3/library/argparse.html)进行梳理,但似乎找不到能满足我需要的任何东西。我以为我可以在add_argument(..)函数中使用nargs = 1,并可能检查生成的列表的长度。任何帮助将不胜感激。

python argparse
2个回答
0
投票

使用可以从提供给a的所有值中创建一个列表:

parser.add_argument('-a', action='append')

对于./script.py -a 5 -a 7 test.txt,您会得到一个列表a=[5,7]

然后,检查此数组的长度是否大于1,并引发异常


0
投票

您没有在问题中显示任何示例代码,因此我们不知道您如何设置参数解析-但是,当我尝试时-猜测您可能已经做了–似乎可以检测到该参数被多次使用。

import argparse

parser = argparse.ArgumentParser(description='Short sample app')
parser.add_argument('-a', action="store_true", default=False)

print(parser.parse_args(['-a', '5', '-a', '7', 'test.txt']))

结果

usage: disallowing-usage-of-a-flag-multiple-times.py [-h] [-a]
disallowing-usage-of-a-flag-multiple-times.py: error: unrecognized arguments: 5 7 test.txt
© www.soinside.com 2019 - 2024. All rights reserved.