如何检查标志--load
是否存在?
#!/usr/bin/env python3
import argparse
import os
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('-l', '--load', nargs='?', metavar='path', help='Load all JSON files recursively in path')
args = parser.parse_args()
print(args)
使用--load
调用脚本输出以下内容:
Namespace(load=None)
我不能省略nargs='?'
并使用action='store_true'
,因为我想允许传递参数,例如--load abcxyz
。
添加action='store_true'
和nargs='?'
会产生错误:
parser.add_argument('-l', '--load', nargs='?', metavar='path', help='Load all JSON files recursively in path', action='store_true')
File "/usr/lib/python3.6/argparse.py", line 1334, in add_argument
action = action_class(**kwargs)
TypeError: __init__() got an unexpected keyword argument 'nargs'
答案 0 :(得分:1)
在上面的代码片段中,用于检查--load标志:
#!/usr/bin/env python3
import argparse
import os
name = None
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('-l', '--load', metavar='path', help='Load all JSON
files recursively in path')
args = parser.parse_args()
print(args.load)
if args.load:
name = args.load
会将name
分配给abcxyz
,否则将为无。
如果我能够理解您的问题,上面的代码实际上可以满足您的需求。
实际上并不需要name
变量,仅用作示例。
答案 1 :(得分:0)
您可以使用in
运算符来测试是否为(子)命令定义了一个选项。然后,您可以将已定义选项的值与其默认值进行比较,以检查是否在命令行中指定了该选项。
#!/usr/bin/env python3
import argparse
import os
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('-l', '--load',
dest='load', nargs='?', default=None,
help='Load all JSON files recursively in path')
args = parser.parse_args()
'some_non_exist_option' in args # False
'load' in args # True
if args.load is not None:
...