【问题标题】:Ask for 0 or 2 positional arguments with argparse?使用 argparse 请求 0 或 2 个位置参数?
【发布时间】:2014-05-11 04:58:18
【问题描述】:

我正在学习argparse模块,我想问0或2个文件。

parser.add_argument("infile", nargs = {0,2}, type=argparse.FileType('r'))

它应该适用于:

    python prog.py
    python prog.py infile1 infile2

但不是:

    python prog.py infile1
    python prog.py infile1 infile2 infile3

实际上,我使用 2 个不同的参数与 "nargs='?'我测试了

sys.argv == 1 or sys.argv == 3

所以,如果你能帮忙:)

【问题讨论】:

  • 你的意思是你测试sys.argc == 1 or sys.argc == 3sys.argv 是一个列表,== 永远不会是一个整数。

标签: python option argparse


【解决方案1】:

曾经想要这个,发现argparse原生不支持,所以就这样写了。

#!/usr/bin/env python

import argparse as ap

parser = ap.ArgumentParser(usage='%(prog)s [-h] [a b]\n')
parser.add_argument('ab', 
                    nargs='*', 
                    help='specify 2 or 0 items', 
                    default=['a', 'b'])

args = parser.parse_args()
if len(args.ab) != 2:
    parser.error('expected 2 arguments')

print(args.ab)

请注意在创建解析器时覆盖使用消息,否则默认使用消息会产生误导。

【讨论】:

  • bugs.python.org/issue11354 中有一个建议的补丁,其中nargs 可以(几乎)是re 接受的关于参数数量的任何内容。在那个用法中,{0,2} 表示范围,而不是 2 个端点。
猜你喜欢
  • 1970-01-01
  • 2014-12-07
  • 2015-07-25
  • 2011-05-27
  • 1970-01-01
  • 2018-04-29
  • 2015-07-12
  • 2016-06-30
  • 2011-05-27
相关资源
最近更新 更多