如何使用Python Argparse制作所需参数的短版和长版?

时间:2015-02-20 21:48:45

标签: python command-line-arguments argparse

我想指定一个名为inputdir的必需参数,但我也想要一个名为i的速记版本。我没有看到一个简洁的解决方案来做这个,没有做任何可选的参数,然后做我自己的检查。有没有一个首选的做法,我没有看到或唯一的方法是使两个都可选,并做我自己的错误处理?

这是我的代码:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("inputdir", help="Specify the input directory")
parser.parse_args()

1 个答案:

答案 0 :(得分:23)

对于标志(以---开头的选项)传入带有标志的选项。您可以指定多个选项:

parser.add_argument('-i', '--inputdir', help="Specify the input directory")

请参阅name or flags option documentation

  

add_argument()方法必须知道是否需要可选参数,如-f--foo,或位置参数,如文件名列表。因此,传递给add_argument()的第一个参数必须是一系列标志或简单的参数名称。

演示:

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-i', '--inputdir', help="Specify the input directory")
_StoreAction(option_strings=['-i', '--inputdir'], dest='inputdir', nargs=None, const=None, default=None, type=None, choices=None, help='Specify the input directory', metavar=None)
>>> parser.print_help()
usage: [-h] [-i INPUTDIR]

optional arguments:
  -h, --help            show this help message and exit
  -i INPUTDIR, --inputdir INPUTDIR
                        Specify the input directory
>>> parser.parse_args(['-i', '/some/dir'])
Namespace(inputdir='/some/dir')
>>> parser.parse_args(['--inputdir', '/some/dir'])
Namespace(inputdir='/some/dir')

但是,必需参数的第一个元素只是一个占位符。 ---选项始终可选(这是命令行约定),从不使用此类开关指定必需的参数。相反,命令行帮助将根据传递给add_argument()的第一个参数显示将所需参数与占位符放在一起的位置,该参数将在没有破折号的情况下传入。

如果你必须打破这个约定并使用以---开头的 ,你必须自己检查:

args = parser.parse_args()
if not args.inputdir:
    parser.error('Please specify an inputdir with the -i or --inputdir option')

此处parser.error() method会将帮助信息与错误消息一起打印出来,然后退出。