2016-11-16 76 views
2

舉個例子:Argparse - 區分不帶選項,調用選項和使用參數調用選項?

#thing.py 
import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument("--show", nargs='?', action="store") 
args = parser.parse_args() 

如何對以下用途之間:

python thing.py 

python thing.py --show 

python thing.py --show all 

從本質上講,我想做不同的事情,如果:

  • 用戶指定任何選項
  • 用戶自行指定「--show」選項
  • 用戶使用字符串/參數指定「--show all」。

在add_argument使用default="foo"不起作用,因爲它是測試時總是存在的 - 我沒有辦法知道用戶是否確實指定了選項「--show」與否。

回答

5

使用const kwarg。如果沒有指定選項,將使用default。如果該選項是自行提供的,則將使用const。如果該選項提供了值,則將使用該值。從文檔

複製:

>>> parser = argparse.ArgumentParser() 
>>> parser.add_argument('--foo', nargs='?', const='c', default='d') 
>>> parser.add_argument('bar', nargs='?', default='d') 
>>> parser.parse_args(['XX', '--foo', 'YY']) 
Namespace(bar='XX', foo='YY') 
>>> parser.parse_args(['XX', '--foo']) 
Namespace(bar='XX', foo='c') 
>>> parser.parse_args([]) 
Namespace(bar='d', foo='d') 
+0

這正是我需要的!謝謝@mwchase – Locane