Python解析器的命令行选项

从命令行执行时,通常我们需要将参数传递给Python脚本。但是,当所需的参数未按相同数量或类型或顺序提供时,脚本会引发异常。那就是需要正确解析命令行参数的地方。

argparse模块为编写非常容易使用命令行界面工具。它处理如何解析sys.argv列表中收集的参数,自动生成帮助并在给出无效选项时发出错误消息。

设计命令行界面的第一步是设置解析器对象。这是通过argparse模块中的ArgumentParser()函数完成的。可以给函数一个说明字符串作为描述参数。

首先,我们的脚本将从没有任何参数的命令行执行。仍然使用解析器对象的parse_args()方法,因为没有给出任何参数,所以它什么也不做。

import argparse
parser = argparse.ArgumentParser(description="sample argument parser")
args=parser.parse_args()

当上述脚本运行时

C:\python36>python argparser1.py
C:\python36>python argparser1.py --help
usage: argparser1.py [-h]
sample argument parser
optional arguments:
-h, --help show this help message and exit

第二个命令行用法提供–help选项,该选项将生成一条帮助消息,如下所示。–help参数默认情况下可用。

现在让我们定义一个参数,该参数是脚本运行所必需的,如果没有给定,脚本应该抛出错误。在这里,我们通过add_argument()方法定义参数'user' 。

import argparse
parser=argparse.ArgumentParser(description="sample argument parser")
parser.add_argument("user")
args = parser.parse_args()
if args.user=="Admin":
print ("Hello Admin")
else:
print ("Hello Guest")

现在,该脚本的帮助以“用户”的形式显示一个位置参数。该程序检查其值是否为“ Admin”,并打印相应的消息。

C:\python36>python argparser1.py --help
usage: argparser1.py [-h] user
sample argument parser
positional arguments:
user
optional arguments:
-h, --help show this help message and exit
C:\python36>python argparser1.py Admin
Hello Admin
C:\python36>python argparser1.py temp
Hello Guest

我们可以在add_argument()方法中为参数指定默认值。

import argparse
parser=argparse.ArgumentParser(description="sample argument parser")
parser.add_argument("user", nargs='?',default="Admin")
args=parser.parse_args()
if args.user=="Admin":
print ("Hello Admin")
else:
print ("Hello Guest")

这里的nargs是应该使用的命令行参数的数量。'?'。如果可能,将从命令行使用一个参数,并将其作为单个项目产生。如果不存在命令行参数,则将生成默认值。

C:\python36>python argparser1.py
Hello Admin
C:\python36>python argparser1.py Admin
Hello Admin
C:\python36>python argparser1.py test
Hello Guest

默认情况下,所有参数都视为字符串。为了明确提到类型的参数,使用类型参数中的add_argument()方法。所有Python数据类型都是type的有效值。

import argparse
parser=argparse.ArgumentParser(description="add numbers")
parser.add_argument("first", type=int)
parser.add_argument("second", type=int)
args = parser.parse_args()
x = args.first
y = args.second
z = x+y
print ('addition of {} and {} = {}'.format(x,y,z))
C:\python36>python argparser2.py 2 3
addition of 2 and 3 = 5

在以上示例中,参数是必需的。要添加可选参数,请在其名称前加上双破折号-。在以下情况下,surname参数是可选的,因为它以双破折号(--surname)为前缀

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("name")
parser.add_argument("--surname")
args = parser.parse_args()
print ("My name is ", args.name, end=' ')
if args.surname:
print (args.surname)

参数的一个字母名称加单破折号作为短名称选项。

C:\python36>python argparser3.py Malhar
My name is Malhar
C:\python36>python argparser3.py Malhar --surname Lathkar
My name is Malhar Lathkar
parser.add_argument("-s","--surname")

如果希望仅从定义的列表中取值,则将其定义为choices参数。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("sub", choices=['Physics', 'Maths', 'Biology'])
args=parser.parse_args()
print ("My subject is ", args.sub)

请注意,如果参数值不在列表中,则会显示无效选择错误。

C:\python36>python argparser4.py Physics
My subject is Physics
C:\python36>python argparser4.py English
usage: argparser4.py [-h] {Physics,Maths,Biology}
argparser4.py: error: argument sub: invalid choice: 'English' (choose from 'Physics', 'Maths', 'Biology')