【问题标题】:Parsing a list of IPs to argparse in python as string将IP列表解析为python中的argparse为字符串
【发布时间】:2017-08-31 04:39:25
【问题描述】:

我想执行一个对多个 IP 地址执行某些操作的 python 脚本。这些地址可以通过命令行给出。

我使用以下命令进行解析:

parser.add_argument('--IP',dest='Adresses',help='some Ips', 
default=['192.168.2.15','192.168.2.3'],type=list,nargs='+')

但是,当我通过如下命令运行脚本时:

python script.py --IP 192.168.2.15,192.168.2.3

它在每个字符之后拆分字符串,如果我使用空格而不是逗号,则会发生相同的行为,因此如果我将其打印出来,则会发生以下输出

[['1', '9', '2', '.', '1', '6', '8', '.', '2', '.', '1', ' 5'], ['1', '9', '2', '.', '1', '6', '8', '.', '2', '.', '3']]

我想要的是:

['192.168.2.15','192.168.2.3']

如默认参数中所述

所以有两件事我在这里没有工作:

  1. 如何将多个字符串解析为 argparse 但在一个参数下,以便将其分隔在一个列表中
  2. 如何停止按字符拆分

感谢您的帮助

【问题讨论】:

  • 您可以将它们重新加入字符串...["".join(x) for x in ip]
  • 不给参数的情况下会不会崩溃或者改变,必须引用默认参数?
  • 嗯,它有效,但我不明白为什么。谢谢你:)

标签: python string argparse


【解决方案1】:

您需要输入str(默认值)和nargs=+,然后将地址作为真实的、分开的参数呈现给进程。

所以:

parser.add_argument('--IP', dest='Adresses', help='some Ips', 
                    default=['192.168.2.15','192.168.2.3'], nargs='+')

使用两个参数调用时会产生以下结果:

parser.parse_args(['--IP', '123.45', '123.34'])
Namespace(Adresses=['123.45', '123.34'])

这将转换为以下命令行调用:

python script.py --IP 123.45 123.34

这是使用nargs=+ 的预期方式,其中type 参数定义每个列表元素的元素类型。

如果您真的想使用IP1,IP2 格式,则需要提供一个自定义检查功能,如here 所示,然后需要使用字符串操作手动拆分输入,包括所有极端情况然后你必须处理,使用建议的方式时由argparse自动处理。

【讨论】:

    猜你喜欢
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多