我使用下面的简单代码来解析一些参数;注意,其中一个是必需的。不幸的是,当用户在不提供参数的情况下运行脚本时,显示的usage/help文本并没有表明存在一个非可选参数,这让我感到非常困惑。我怎样才能让python指出一个参数不是可选的?
代码如下:
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description='Foo')
parser.add_argument('-i','--input', help='Input file name', required=True)
parser.add_argument('-o','--output', help='Output file name', default="stdout")
args = parser.parse_args()
print ("Input file: %s" % args.input )
print ("Output file: %s" % args.output )
当运行上述代码而不提供所需的参数时,我得到以下输出:
usage: foo.py [-h] -i INPUT [-o OUTPUT]
Foo
optional arguments:
-h, --help show this help message and exit
-i INPUT, --input INPUT
Input file name
-o OUTPUT, --output OUTPUT
Output file name
再一次,以@RalphyZ为基础
这个不会破坏暴露的API。
from argparse import ArgumentParser, SUPPRESS
# Disable default help
parser = ArgumentParser(add_help=False)
required = parser.add_argument_group('required arguments')
optional = parser.add_argument_group('optional arguments')
# Add back help
optional.add_argument(
'-h',
'--help',
action='help',
default=SUPPRESS,
help='show this help message and exit'
)
required.add_argument('--required_arg', required=True)
optional.add_argument('--optional_arg')
它将显示与上面相同的内容,并且应该在未来的版本中存在:
usage: main.py [-h] [--required_arg REQUIRED_ARG]
[--optional_arg OPTIONAL_ARG]
required arguments:
--required_arg REQUIRED_ARG
optional arguments:
-h, --help show this help message and exit
--optional_arg OPTIONAL_ARG
您不需要重写可选组。
只做:
parser = argparse.ArgumentParser()
required = parser.add_argument_group('required arguments')
required.add_argument('--required_arg', required=True)
# All arguments set via parser directly will automatically go to the optional group
parser.add_argument('--optional_arg')
parser.print_help()
会打印出来
usage: [-h] --required_arg REQUIRED_ARG [--optional_arg OPTIONAL_ARG]
optional arguments:
-h, --help show this help message and exit
--optional_arg OPTIONAL_ARG
required arguments:
--required_arg REQUIRED_ARG
如果您希望在可选参数之前有必要的参数,您可以执行以下操作:
parser = argparse.ArgumentParser()
optional = parser._action_groups.pop()
required = parser.add_argument_group('required arguments')
parser._action_groups.append(optional)
required.add_argument('--required_arg', required=True)
optional.add_argument('--optional_arg')
parser.print_help()
它将以正确的顺序打印组:
usage: [-h] --required_arg REQUIRED_ARG [--optional_arg OPTIONAL_ARG]
required arguments:
--required_arg REQUIRED_ARG
optional arguments:
-h, --help show this help message and exit
--optional_arg OPTIONAL_ARG