代码之家  ›  专栏  ›  技术社区  ›  sf8193

使用argparse仅解析可选参数

  •  0
  • sf8193  · 技术社区  · 8 年前

    python3 create.py k=7 split=9
    

    我的问题是argparse忽略了等号,并将这些参数作为[k=7,split=9]。如您所见,它们最终是字符串,而不是我想要的整数。如何在命令行上指定要成为什么整数的参数?

    记录在案,这就是我的代码

    parser = argparse.ArgumentParser()
    parser.add_argument('k', nargs='?', default=6)
    parser.add_argument('split', nargs='?', default=0.67)
    arg = parser.parse_args()
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   hpaulj    8 年前

    在里面 argparse 术语,有 positionals 和 optionals . 这个 ? positional 不是必需的(可选),但它仍然是 . 相反地 optional 可能有 required=True 参数,但它仍然是一个 ,在拿旗的意义上。是的,这个术语很难理解,但它有着悠久的历史,我们被它所束缚。为了避免混淆,我喜欢谈论 flagged 而不是 期权 .

    这个 = 输入仅适用于标记的参数,例如:

    In [68]: parser = argparse.ArgumentParser();
    In [69]: parser.add_argument('-k', nargs='?')
    Out[69]: _StoreAction(option_strings=['-k'], dest='k', nargs='?', const=None, default=None, type=None, choices=None, help=None, metavar=None)
    In [70]: parser.add_argument('--split', nargs='?');
    In [71]: parser.parse_args('-k=7 --split=9'.split())
    Out[71]: Namespace(k='7', split='9')
    

    根据你的定义, k split 仍然是位置参数,即使使用 ? nargs

    python3 create.py 7 9
    

    只用一根绳子

    python3 create.py 7
    

    K 获取一个值; 分裂 获取默认值。有了位置,设置是不可能的 而不是 K