我想为命令提供 3 个参数:<version>
, <input file>
and <output file>
正常使用情况下。除非有一个特定的标志--init
,这基本上将运行程序,而不需要任何输入和输出文件规范。
因此,我理想的情况是有一个命令,其用法是:
py program.py --init
OR
py program.py <version> <input file> <output file>
然而,由于位置参数始终是必需的(因为在除--init
),似乎没有办法干净地获得这个语法,我能想到的就是将 3 个位置参数变成一个可选标志,如果可选标志不存在,则引发异常--init
不被调用。这一切看起来都很丑陋。
到目前为止我的代码:
def get_args():
parser = argparse.ArgumentParser(description="Tool for FOO-ing a BAR.")
parser.add_argument(dest="version", help="The version.")
parser.add_argument(dest="input", help="The input file.")
parser.add_argument(dest="output", help="The output file.")
parser.add_argument("-i", "--init", dest="init", action="store_true", help="Foo Init.")
return parser.parse_args()
澄清:
要么全部 3 个参数 (<version> <input> <output>
) 必须指定。
OR
该程序仅运行--init
应指定 flag 和 0 参数。
程序不应接受指定的 0、1 或 2 个参数(没有--init
flag).
您可以定义自己的操作类:
class init_action(argparse.Action):
def __init__(self, option_strings, dest, **kwargs):
return super().__init__(option_strings, dest, nargs=0, default=argparse.SUPPRESS, **kwargs)
def __call__(self, parser, namespace, values, option_string, **kwargs):
# Do whatever should be done here
parser.exit()
def get_args():
parser = argparse.ArgumentParser(description="Tool for FOO-ing a BAR.")
parser.add_argument(dest="version", help="The version.")
parser.add_argument(dest="input", help="The input file.")
parser.add_argument(dest="output", help="The output file.")
parser.add_argument("-i", "--init", action=init_action, help="Foo Init.")
return parser.parse_args()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)