use*_*633 22 python command-line-arguments argparse
我想指定一个被调用的必需参数,inputdir但我也希望有一个名为的简写版本i.我没有看到一个简洁的解决方案来做这个,没有做任何可选的参数,然后做我自己的检查.有没有一个首选的做法,我没有看到或唯一的方法是使两个可选和我自己的错误处理?
这是我的代码:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("inputdir", help="Specify the input directory")
parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 30
对于标志(以-或开头的选项--)传递带有标志的选项.您可以指定多个选项:
parser.add_argument('-i', '--inputdir', help="Specify the input directory")
Run Code Online (Sandbox Code Playgroud)
请参阅名称或标志选项文档:
该
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')
Run Code Online (Sandbox Code Playgroud)
但是,必需参数的第一个元素只是一个占位符.-和--选项总是可选的(这是命令行约定),从不使用这些开关指定必需的参数.相反,命令行帮助将根据传递给的第一个参数显示将所需参数放在占位符的位置,该参数add_argument()将在没有短划线的情况下传入.
如果您有与该公约打破和使用的参数开始-或--所需无论如何,你必须做你自己的检查:
args = parser.parse_args()
if not args.inputdir:
parser.error('Please specify an inputdir with the -i or --inputdir option')
Run Code Online (Sandbox Code Playgroud)
此parser.error()方法将打印帮助信息和错误消息,然后退出.