我有一个使用默认名称和密码的程序。我使用argparse来允许用户指定命令行选项,并且我希望允许用户为程序提供不同的名称和密码以供使用。因此,我有以下几点:
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)
发布于 2015-10-08 01:11:42
我知道这已经晚了两年多了,但我找到了一个简洁的好方法:
if bool(ns.username) ^ bool(ns.password):
parser.error('--username and --password must be given together')
^
是Python语言中的XOR运算符。要求在命令行给出这两个参数本质上是一个XOR测试。
发布于 2013-01-16 10:26:13
我可能就是这么做的。由于您具有可更改的现有默认值,因此请定义默认值,但不要将它们用作参数默认值:
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
https://stackoverflow.com/questions/14350343
复制相似问题