我想知道如何在给出一个标志时使一个参数成为必需的,而在未给出该标志时如何使一个参数成为可选的?
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-c', '--convert', action = 'store_true')
parser.add_argument('-l', '--lookup', action = 'store_true')
parser.add_argument('name', type = str)
args = parser.parse_args()
if args.name:
print(args.name)
if args.convert:
print ("convert now!")
例如,在上面的代码中,我希望只有在给出-c 时才需要name。当我只用-l运行程序时,出现错误:
$ python3 test.py -l
usage: test.py [-h] [-c] [-l] name
test.py: error: the following arguments are required: name
我尝试使用参数组将参数分为两组 1. -c 和 name; 2. -l,但它并没有真正起作用。
如有任何建议,我们将不胜感激!
请您参考如下方法:
这不是 argparse 可以自行执行的。您可以做的是将 name 定义为可选的,然后在解析后检查是否满足您的约束条件。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-c', '--convert', action='store_true')
parser.add_argument('-l', '--lookup', action='store_true')
parser.add_argument('name', nargs='?')
args = parser.parse_args()
# If args.name must be a non-empty string when given,
# you can use 'not args.name' in place of 'args.name is None'
if args.convert and args.name is None:
parser.error("<name> required with --convert")
if args.name:
print(args.name)
if args.convert:
print ("convert now!")
