如何使用python argparse实现嵌套的可选参数

时间:2017-08-16 17:53:26

标签: python argparse

我正在尝试使用登录我的服务器的工具:      myLogin [-h] [--ip [地址]] [用户名] [密码]

  1. 当未使用 - ip 时,工具将使用URL名称(my.server.net)进行连接。
  2. 当使用 - ip 但未提供 地址 时,工具将使用默认IP地址(192.168.1.1)进行连接。
  3. 如果没有 - ip 开关,则无法提供
  4. 地址
  5. UserName 密码是可选的,并且具有内置默认值。
  6. 如何使用python argparse库实现依赖的嵌套可选参数:[--ip [Address]]?

    我尝试使用add_subparsers和add_argument_group而没有任何运气。

1 个答案:

答案 0 :(得分:1)

nargs='?'

nargs可以设置为?

  

'?'。如果可能,将从命令行使用一个参数,并将其作为单个项生成。如果不存在命令行参数,则将生成默认值。请注意,对于可选参数,还有一种情况 - 选项字符串存在但后面没有命令行参数。在这种情况下,将生成const的值。一些例子来说明这一点:

在您的情况下,您使用的是可选参数,因此在未提供地址时将使用const的值。如果参数完全丢失,则使用默认值。例如,

>>> from argparse import ArgumentParser
>>> parser = ArgumentParser()
>>> parser.add_argument('--ip', nargs='?', default='my.server.net', const='192.168.1.1')
_StoreAction(option_strings=['--ip'], dest='ip', nargs='?', const='192.168.1.1', default='my.server.net', type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args([])
Namespace(ip='my.server.net')
>>> parser.parse_args(['--ip'])
Namespace(ip='192.168.1.1')
>>> parser.parse_args(['--ip', '1.2.3.4'])
Namespace(ip='1.2.3.4')
>>>