Argparse:如果存在“ x”,则必需的参数“ y”


问题内容

我有如下要求:

./xyifier --prox --lport lport --rport rport

对于参数prox,我使用action =’store_true’来检查它是否存在。我不需要任何论点。但是,如果设置了--prox,我也 需要
rport和lport。有没有一种简单的方法可以用argparse做到这一点而无需编写自定义条件编码。

更多代码:

non_int.add_argument('--prox', action='store_true', help='Flag to turn on proxy')
non_int.add_argument('--lport', type=int, help='Listen Port.')
non_int.add_argument('--rport', type=int, help='Proxy port.')

问题答案:

不,argparse中没有任何选项可以构成相互 包含 的选项集。

解决此问题的最简单方法是:

if args.prox and (args.lport is None or args.rport is None):
    parser.error("--prox requires --lport and --rport.")