Python 命令行选项解析器
我们经常需要在从命令行执行 Python 脚本时向其传递参数。但是,如果未提供所需数量、类型或顺序的参数,脚本会引发异常。这就是需要正确解析命令行参数的原因。
**argparse** 模块提供了编写易于使用的命令行界面的工具。它处理如何解析从 sys.argv 列表中收集的参数,自动生成帮助信息,并在给出无效选项时发出错误消息。
设计命令行界面的第一步是设置解析器对象。这是通过 argparse 模块中的 **ArgumentParser()** 函数完成的。该函数可以将解释性字符串作为 description 参数。
首先,我们的脚本将在没有任何参数的情况下从命令行执行。仍然使用解析器对象的 **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")此脚本的帮助信息现在显示了一个位置参数,形式为 ‘user’。程序检查其值是否为 ‘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() 方法中为参数赋值 **default** 值。
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** 是应该使用的命令行参数的数量。'?'。如果可能,将从命令行使用一个参数,并将其作为一个项目生成。如果没有命令行参数,则将生成 default 中的值。
C:\python36>python argparser1.py Hello Admin C:\python36>python argparser1.py Admin Hello Admin C:\python36>python argparser1.py test Hello Guest
默认情况下,所有参数都被视为字符串。要明确说明参数的 **type**,请在 add_argument() 方法中使用 type 参数。所有 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')
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP