【问题标题】:Disallowing Usage of a flag multiple times多次禁止使用标志
【发布时间】:2020-08-15 04:42:31
【问题描述】:

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

./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 并可能检查生成的列表的长度。任何帮助将不胜感激。

【问题讨论】:

  • 只有一个位置,第二种情况是不允许的。第一个是允许的,但args.a 将是7。为什么用户会重复-a?使用最后一个而忽略第一个有什么问题?

标签: python argparse


【解决方案1】:

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

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

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

然后,检查这个数组的长度是否大于1,并抛出异常

【讨论】:

    【解决方案2】:

    你没有在你的问题中显示任何示例代码,所以我们不知道你是如何设置参数解析的——但是当我尝试它时——猜测你可能做了什么——它似乎检测到参数被多次使用。

    import argparse
    
    parser = argparse.ArgumentParser(description='Short sample app')
    parser.prog = 'test_script.py'  # For testing - changes argparse msgs.
    parser.add_argument('-a', action="store_true", default=False)
    
    
    print(parser.parse_args(['-a', '5', '-a', '7', 'test.txt']))
    

    结果

    usage: test_script.py [-h] [-a]
    test_script.py: error: unrecognized arguments: 5 7 test.txt
    5 7 test.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多