【问题标题】:How to implement nested optional arguments using python argparse如何使用 python argparse 实现嵌套的可选参数
【发布时间】:2017-08-17 02:05:32
【问题描述】:

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

  1. 如果不使用--ip,则工具将使用 URL 名称 (my.server.net) 进行连接。
  2. 当使用 --ip 但未提供 地址 时,工具将使用默认 IP 地址 (192.168.1.1) 进行连接。
  3. 如果没有 --ip 开关,则无法提供 地址
  4. UserNamePassword 是可选的并且具有内置默认值。

如何使用 python argparse 库实现具有依赖关系的嵌套可选参数:[--ip [Address]]?

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

【问题讨论】:

  • 试试nargs='?' with default`和const参数。
  • @hpaulj,谢谢

标签: python argparse


【解决方案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')
>>>

【讨论】:

    猜你喜欢
    • 2015-12-26
    • 2013-05-23
    • 2016-05-30
    • 2012-07-30
    • 2013-03-23
    • 2017-11-28
    • 2019-11-17
    • 2019-07-12
    相关资源
    最近更新 更多