gpt4 book ai didi

Python 参数解析 : how to make an argument required if and only if one flag is given?

转载 作者:太空宇宙 更新时间:2023-11-04 08:46:24 25 4
gpt4 key购买 nike

我想知道如何在给出一个标志时使一个参数成为必需的,而在未给出该标志时如何使一个参数成为可选的?

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. -cname; 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!")

关于Python 参数解析 : how to make an argument required if and only if one flag is given?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40120379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com