您可以簡單地添加一個參數action='store_true'
,如果不包含--calories
,將會默認args.calories
爲False。爲了進一步澄清,如果用戶增加了--calories
,args.calories
將被設置爲True
。
parser = argparse.ArgumentParser(description='Get food details.')
# adding the `--food` argument
parser.add_argument('--food', help='name of food to lookup', required=True, type=file)
# adding the `--calories` argument
parser.add_argument('--calories', action='store_true', dest='calories', help='...')
# note: `dest` is where the result of the argument will go.
# as in, if `dest=foo`, then `--calories` would set `args.foo = True`.
# in this case, it's redundant, but it's worth mentioning.
args = parser.parse_args()
if args.calories:
# if the user specified `--calories`,
# call the `calories()` method
calories()
else:
do_whatever()
不過,如果你想具體檢查yes
或no
,然後更換store_true
在
parser.add_argument('--calories', action='store_true', dest='calories', help='...')
與store
,如下圖所示
parser.add_argument('--calories', action='store', dest='calories', type='str', help='...')
這一操作將允許您以後檢查
if args.calories == 'yes':
calories()
else:
do_whatever()
請注意,在這種情況下,我加入type=str
,其解析參數作爲一個字符串。既然你指定的選擇是要麼yes
或no
,實際上允許我們進一步指明可能的輸入與choices
域:
parser.add_argument('--calories', action='store', dest='calories', type='str',
choices=['yes', 'no'], help='...')
現在,如果用戶輸入任何在['yes', 'no']
沒有,這將提高一個錯誤。
最後一個可能性添加default
,這樣用戶不必一定指定特定標誌的所有時間:
parser.add_argument('--calories', action='store', dest='calories', type='str',
choices=['yes', 'no'], default='no', help='...')
編輯:@ShadowRanger在評論中指出,在這種情況下, dest='calories'
,action='store'
和type='str'
是默認值,所以你可以忽略它們:
parser.add_argument('--calories', choices=['yes', 'no'], default='no', help='...')
什麼?我明白所有的話,但我不明白你正在嘗試做的 –
'型= file'作品,但可能不會做你期望的。在Python2中'file'和'open'是一樣的,它是打開一個文件的函數。所以是的,你可以做'args.food.read()'。 'type = argparse.FileType('r')'可以更好地控制文件的打開方式。 'file'在Python3中沒有定義。 – hpaulj