gpt4 book ai didi

python - Argparse - 一次访问多个参数

转载 作者:行者123 更新时间:2023-11-30 23:33:39 25 4
gpt4 key购买 nike

我的应用程序使用数据库,因此当添加新元素(从命令行)时,我想检查该元素是否已在数据库中,我如何处理 add_argument 的“type”参数:

def check_uniq(project_name):
if Project.exists(project_name):
raise argparse.ArgumentTypeError(
return project_name

这工作得很好,但是为了让最终用户更容易思考,我想在我的参数中添加一个 --force 选项,以便在添加和删除之前测试并删除该变量在这种情况下,请注意提出论点。如何在 check_uniq 中访问 --force 选项?

最佳答案

测试该选项是否在同一个 if 雄蕊中设置:

def check_uniq(project_name, options):
if Project.exists(project_name) and not options.force:
raise argparse.ArgumentTypeError('Project already exists')
return project_name

其中options采用parser.parse_args()返回的Namespace实例。

不幸的是,在所有参数都被解析之前你无法验证这一点,你不能使用这个函数作为type参数,因为--force 选项可以在命令行上的任何位置指定,在指定项目名称的选项之前或之后。

如果您需要在命令行上的任何项目之前列出 --force,您可以使用自定义 action反而;自定义操作被传递到解析的命名空间对象到目前为止:

class UniqueProjectAction(argparse.Action):
def __call__(self, parser, namespace, value, option_string=None):
if Project.exists(value) and not namespace.force:
raise argparse.ArgumentTypeError('Project already exists')
setattr(namespace, self.dest, values)

关于python - Argparse - 一次访问多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18657151/

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