您可以简单地添加一个参数action='store_true'
,如果未包括--calories
,则默认将args.calories
设置为False。进一步澄清,如果用户添加了--calories
,args.calories
将被设置为True
。
parser = argparse.ArgumentParser(description='Get food details.')
parser.add_argument('--food', help='name of food to lookup', required=True, type=file)
parser.add_argument('--calories', action='store_true', dest='calories', help='...')
args = parser.parse_args()
if args.calories:
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
,argparse
实际上允许我们使用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='...')
type=file
可以工作,但可能不会达到您的预期。在 Python2 中,file
与打开文件的函数open
相同。因此,是的,您可以执行args.food.read()
。type=argparse.FileType('r')
可以更好地控制文件的打开方式。在 Python3 中,file
未定义。 - hpaulj