我有一个程序,可以通过argparse接受输入文件,输入格式和输出格式作为必需参数。但是,我想将“ --test”作为一个标志,它将在我的所有单元测试中运行。
如何将其设置为可以在没有必需参数的情况下运行的标志?就像传统的-h标志一样吗?
def process_args():
global args
parser = argparse.ArgumentParser(description="Convert quantum circuits into different environments")
parser.add_argument("input_filename", help="input filename")
parser.add_argument("input_format", help="input format of your script", choices=valid_program_types)
parser.add_argument("output_format", help="output format of your script", choices=valid_program_types)
parser.add_argument("-o", "--output_filename", help="set output filename, without file extension "
"(default: convertqc_result.<filetype>")
parser.add_argument("-d", "--debug", help="enable debug mode", action="store_true")
args = parser.parse_args()
答案 0 :(得分:1)
-h
的工作方式是触发类型为_HelpAction
的特定动作,就像由类似的东西定义一样
parser.add_argument('-h', action='help')
此操作(最终)将调用sys.exit
,因此绕过了解析算法的其余部分,使必需参数的问题变得毫无意义。
您可以通过子类化TestAction
来定义自己的自定义操作Action
(有关详细信息,请参见https://docs.python.org/3/library/argparse.html#action),然后用{p>定义--test
class TestAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
""" Run your tests and exit the script here """
parser.add_argument("--test", action=TestAction)
或者,定义单独的子命令test
和run
,以便仅run
子命令具有必需的参数,而test
子命令仅运行测试并存在。 / p>
但是,最好的办法是使运行单元测试与运行脚本脱钩。甚至没有理由在希望运行脚本的环境中部署单元测试。使用单独的测试运行器脚本(或类似nosetests
的脚本)运行测试,而无需运行脚本本身。