Python argparse 可选 arg 需要其他参数

Posted

技术标签:

【中文标题】Python argparse 可选 arg 需要其他参数【英文标题】:Python argparser optional arg that requires other arguments 【发布时间】:2020-08-24 17:02:59 【问题描述】:

我已经搜索了互联网,但我找不到是否可以使用可选的 python argparser 包进行参数,但是当它被选择时,它需要参数。

为了更好的理解,我会用代码解释,让大家更容易理解。

我的目标是建立一个数据库,其中包含我注册的所有网站和应用程序,并在其中存储网站或平台、邮件、用户和密码。我想创建一些可选参数,例如:

Python manageaccounts.py --add steam mail user pass

这只是一个例子,但我认为它更容易理解。 基本上,我想要的不是“--add”,而是“--delete”和“--change”参数。有了这个我想说我不知道​​如何使一个参数成为可选的,当它被选择时它需要另一个参数,在这种情况下我选择“--add”并在我的数据库中添加一个新行我需要一个“ site" 一个 "mail" "user" 和 "pass",我想让 "--add" 可选,当它被选为站点邮件用户和 pass 时需要

如果有人不明白我想知道的是如何让一个论点需要另一个论点。

【问题讨论】:

你试过'nargs='吗?之前讨论过***.com/a/4480202/7548672 我今天开始学习这个包,所以我不太了解,因为我不知道那是什么,但如果你能解释一下,我将不胜感激! 'nargs' 指定应该使用的命令行参数的数量。可以指定直接值 nargs= 3,可变数量的参数 nargs=*,可以是可选的单个值 args='?'或 args='+' 类似 * 但需要一个参数。在这里阅读更多信息:docs.python.org/3/library/argparse.html#nargs 哦,我明白了,非常感谢! 【参考方案1】:

听起来你想要的是subparser

这是一个例子:

import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subparser')

add = subparsers.add_parser("add")
add.add_argument('steam')
add.add_argument('mail')
add.add_argument('user')
add.add_argument('password')

delete = subparsers.add_parser("delete")
delete.add_argument('user')

args = parser.parse_args()

if args.subparser == 'add':
    print("Called add with arguments", args.user, args.mail, args.steam, args.password)
elif args.subparser == 'delete':
     print("Called delete with arguments", args.user)
else:
    print("Unknown option")


【讨论】:

是的!我不知道它存在,但非常感谢!顺便说一句,什么是“dest”参数? Nvr mind 我搜索了它,我现在知道它是什么。非常感谢。

以上是关于Python argparse 可选 arg 需要其他参数的主要内容,如果未能解决你的问题,请参考以下文章

使用argparse的可选命名参数

python 学习 argparse

检查是不是设置了 argparse 可选参数

Python 2.7 argparse:如何正确嵌套可选的互斥参数?

需要将`-`字符嵌入到python argparse中的参数中

python argparse - 要么两个可选参数,要么一个都没有