我想让解析器像 cmd [-a xxx -b xxx] -c xxx -d xxx
何时-a使用,我也想-b使用.同样,如果-b使用,也-a必须使用.这两个都没关系-a,-b也没有用过.
我怎么做?我尝试过自定义操作,但效果不佳.
Chr*_*is 10
Argparse本身不支持这种类型的使用.
最有效的方法是检查并查看解析后是否满足这些类型的条件:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-b')
parser.add_argument('-c')
args = parser.parse_args()
required_together = ('b','c')
# args.b will be None if b is not provided
if not all([getattr(args,x) for x in required_together]):
raise RuntimeError("Cannot supply -c without -b")
Run Code Online (Sandbox Code Playgroud)
che*_*ner 10
更好的设计是拥有一个带有两个参数的选项:
parser.add_argument('-a', nargs=2)
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用2个参数指定选项,或者根本不指定它.
$ script -a 1 2
Run Code Online (Sandbox Code Playgroud)
要么
$ script
Run Code Online (Sandbox Code Playgroud)
自定义动作(或后处理)可以在元组分裂args.a成两个单独的值args.a和args.b.
| 归档时间: |
|
| 查看次数: |
4189 次 |
| 最近记录: |