我有如下要求:
./xyifier --prox --lport lport --rport rport
Run Code Online (Sandbox Code Playgroud)
对于参数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.')
Run Code Online (Sandbox Code Playgroud) 除了修改argparse源代码外,如果parse_args()在调用时遇到问题,有没有办法控制退出状态代码,例如,缺少必需的开关?
以下粘贴包含来自三个单独的Python文件的相关片段。第一个是从命令行调用的脚本,该脚本在给定某些参数的情况下实例化CIPuller。发生的情况是脚本被调用,类似于:(
script.py ci其他argpar被argparse吞噬)。
第二个是名为的子类的一部分Puller。三是子类的部分Puller叫CIPuller。
当调用正确的子类时,这将非常有用,并且使用错误其他args的任何用户都可以查看给定子类的正确args,以及超类的通用参数。(尽管使我脱机了,也许我应该为此使用argparse子命令。)
我被困试图为这些类编写测试。当前,我需要ArgumentParser实例化这些类,但是在测试中,我不是从命令行实例化事物,因此我ArgumentParser没有用。
我尝试ArgumentParser在测试工具中创建一个,以传递给CIPuller's测试代码中的构造函数,但是如果add_argument在那儿使用argparse,则可以理解,当它add_argument在CIPuller构造函数中调用时,会抱怨双(重复)参数。
有什么合适的设计来用参数测试这些类?
#!/usr/bin/env python
from ci_puller import CIPuller
import argparse
import sys
# Using sys.argv[1] for the argument here, as we don't want to pass that onto
# the subclasses, which should receive a vanilla ArgumentParser
puller_type = sys.argv.pop(1)
parser = argparse.ArgumentParser(
description='Throw data into Elasticsearch.'
)
if puller_type == 'ci': …Run Code Online (Sandbox Code Playgroud)