我正在尝试制作一个脚本,其用法如下:
my_script [-p parg -l larg] | [-s sarg]
即脚本要么采用-p参数-l要么参数 -s。如果同时指定-p和 ,则会出错。-s我尝试了以下但似乎不起作用
import argparse
parser = argparse.ArgumentParser(description='Some Desc')
gp = parser.add_mutually_exclusive_group()
num_gp = gp.add_argument_group()
num_gp.add_argument('-p')
num_gp.add_argument('-l')
gp.add_argument('-s')
In [18]: parser.parse_args(['-p blahp', '-l blahl', '-s blahs'])
Out[18]: Namespace(l=' blahl', p=' blahp', s=' blahs') #ERROR Should have failed as I specify both `-p` and `-s` which belong to a mutually_exclusive_group
我认为你滥用了相互排斥的群体。组与其他组并不互斥,组的成员之间却是互斥的。另外,据我从文档中可以看出,标准组不会影响解析逻辑,它们仅有助于组织解析器生成的帮助消息。
以下是如何做出两个选项,-p例如-s,互斥的:
import argparse
parser = argparse.ArgumentParser(description='Some Desc')
group1 = parser.add_mutually_exclusive_group()
group1.add_argument("-p")
group1.add_argument("-s")
# This works
args = parser.parse_args(["-p", "argForP"])
# This will throw an error
args = parser.parse_args(["-p", "argForP", "-s", "argForS"])
但我不确定此功能是否允许您实现您的用例,因为我不确定参数是否可以属于两个互斥的组。但是,您始终可以自己进行错误检查,并使用parser.error. 那看起来像这样:
message = "invalid options"
# Tells us p is used without l or vise versa
if (args.p is None) != (args.l is None):
    parser.error(message)
# Tells is if p-l is used with s
if (args.p is None) == (args.s is None):
    # Either both are used or neigher
    parser.error(message)
| 归档时间: | 
 | 
| 查看次数: | 2558 次 | 
| 最近记录: |