2017-08-16 60 views
0

我想拿出一個工具來登錄到我的服務器: myLogin [-h] [--ip [Address]] [UserName] [Password]如何使用python實現嵌套的可選參數argparse

  1. 當不使用--ip,則工具將使用的URL名稱(my.server.net)進行連接。
  2. 當使用--ip但沒有提供地址,則工具將用於連接使用的默認IP地址(192.168.1.1)。
  3. 地址無法提供沒有--ip開關。
  4. 用戶名密碼是可選的並且具有內置的默認值。

如何使用python argparse庫實現具有依賴關係的嵌套可選參數:[--ip [Address]]?

我嘗試使用add_subparsers和add_argument_group沒有任何的運氣。

+1

嘗試'nargs ='?'使用'default'和'const'參數。 – hpaulj

+0

@hpaulj,謝謝 –

回答

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') 
>>>