代码之家  ›  专栏  ›  技术社区  ›  Roman Sokolov Zdeslav Vojkovic

Python argparse无法识别的参数

  •  2
  • Roman Sokolov Zdeslav Vojkovic  · 技术社区  · 6 年前

    我正在尝试使用 argparse 分析命令行参数。这是我的代码:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import argparse
    
    def create_parser():
        parser = argparse.ArgumentParser()
        parser.add_argument('--allow_ips', nargs='*')
        return parser
    
    if __name__ == '__main__':
        parser = create_parser()
        namespace = parser.parse_args()
    

    当脚本像这样执行时, argparse 抱怨无法识别的参数。

    ./prog.py --allow_ips=192.168.0.10 192.168.0.11 192.168.0.12
    

    但是当脚本像这样执行时, argparse 表示满意。

    ./prog.py --allow_ips 192.168.0.10 192.168.0.11 192.168.0.12
    

    我应该如何更改代码以便在参数列表中使用“=”?

    1 回复  |  直到 6 年前
        1
  •  4
  •   ndmeiri Someguy    6 年前

    根据 argparse documentation ,通过 * nargs 参数意味着

    所有存在的命令行参数都收集到一个列表中。

    当您调用程序时 没有 等号,所有三个IP地址都被视为 --allow_ips 论点它们将在列表中提供给您的程序。

    当您调用程序时 具有 等号,仅第一个IP地址被视为 --允许\u IP 论点 argparse 然后尝试解析第二个和第三个IP地址。但它不能,因为您的程序不接受任何位置参数。所以 argparse 引发异常。