首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python argparse -要么都是可选参数,要么都不是

python argparse -要么都是可选参数,要么都不是
EN

Stack Overflow用户
提问于 2013-01-16 10:10:35
回答 2查看 12.5K关注 0票数 32

我有一个使用默认名称和密码的程序。我使用argparse来允许用户指定命令行选项,并且我希望允许用户为程序提供不同的名称和密码以供使用。因此,我有以下几点:

代码语言:javascript
复制
parser.add_argument(
    '-n',
    '--name',
    help='the login name that you wish the program to use'
    )

parser.add_argument(
    '-p',
    '--password',
    help='the password to log in with.'
    )

但是,只指定名称或密码没有任何意义,但两者都不指定才是有意义的。我注意到argparse确实能够指定两个参数是互斥的。但我有两个必须同时出现的论点。如何获得此行为?(我找到了文档中提到的“参数组”,但它们似乎不能解决我的问题http://docs.python.org/2/library/argparse.html#argument-groups)

EN

回答 2

Stack Overflow用户

发布于 2015-10-08 01:11:42

我知道这已经晚了两年多了,但我找到了一个简洁的好方法:

代码语言:javascript
复制
if bool(ns.username) ^ bool(ns.password):
    parser.error('--username and --password must be given together')

^是Python语言中的XOR运算符。要求在命令行给出这两个参数本质上是一个XOR测试。

票数 22
EN

Stack Overflow用户

发布于 2013-01-16 10:26:13

我可能就是这么做的。由于您具有可更改的现有默认值,因此请定义默认值,但不要将它们用作参数默认值:

代码语言:javascript
复制
default_name = "x"
default_pass = "y"
parser.add_argument(
    '-n',
    '--name',
    default=None,
    help='the login name that you wish the program to use'
    )

parser.add_argument(
    '-p',
    '--password',
    default=None,
    help='the password to log in with.'
    )
args = parser.parse_args()
if all(i is not None for i in [args.name, args.password]):
    name = args.name
    passwd = args.password
elif any(i is not None for i in [args.name, args.password]):
    parser.error("Both Name and Password are Required!")
else:
    name = default_name
    passwd = default_pass
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14350343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档