轻松编写命令行接口,argparse模块你值得拥有


全文共1699字 , 预计学习时长11分钟

轻松编写命令行接口,argparse模块你值得拥有
本文插图

图源:unsplash
相信大多数人都会用这行命令运行python脚本 。
$ python main.py
我们能否对该脚本稍作修改比如说定义自己的参数?当然可以!
$ python main.py arg1 arg2
Python中的argparse模块能解决这个问题 。 argparse 模块可以让人轻松编写用户友好的命令行接口 。
程序定义它需要的参数 , 然后argparse将弄清如何从sys.argv解析出那些参数 。 argparse模块还会自动生成帮助和使用手册 , 并在用户给程序传入无效参数时报出错误信息 。
安装Argparse
和往常一样 , 要做的第一件事就是安装这个Python模块 。
conda install argparse【轻松编写命令行接口,argparse模块你值得拥有】
定义位置参数和可选参数
import argparse if __name__ ==''__main__'': parser = argparse.ArgumentParser(description='''''' This script is going to create an employeeprofile. '''''') parser.add_argument(''name'', help=''Name ofEmployee'') parser.add_argument(''title'', help=''Job Titleof Employee'') parser.add_argument(''--address'', help=''Address ofEmployee'') args = parser.parse_args() NAME= args.name TITLE= args.title ADDRESS= args.address print(''Name :''+NAME) print(''Job Title : ''+TITLE) print(''Address : ''+ADDRESS)
创建一个ArgumentParse的对象parser , 在ArgumentParser中对该脚本做简要描述 。 用add_argument函数定义位置和可选参数 , help用来简单描述这个参数的作用 。
位置参数是必须放在合适位置或是遵循一定顺序的参数 。

轻松编写命令行接口,argparse模块你值得拥有
本文插图

图源:unsplash
可选参数是输入一个关键字和等号的关键字参数 , 输入内容是可选的 。
· 尝试用help参数-h运行该脚本
$ python employee.py -h usage: employee.py [-h] [--address ADDRESS] name titleThis script is going tocreate an employee profile.positional arguments: nameName of Employee titleJob Title of Employeeoptionalarguments: -h, --helpshow this help message and exit --address ADDRESSAddress of Employee
-h和 --help 是argparse中默认定义的参数 , 显示在脚本中定义的描述 , 为用户在使用该脚本时提供帮助 。
· 输入name 和 title
$ python employee.py AlexManager Name : Alex Job Title : Manager Address : None
由于address参数定义为空 , 在脚本中会把NoneType的值传递给它 。 在输出结果之前需要将其转换成字符串 。
· 试试只输入name
$ python employee.py Alex usage: employee.py [-h] [--address ADDRESS] name title employee.py: error: the following arguments are required: title
因为title也是位置参数 , 所以在脚本中不可省略 。
· 这次输入name,title和address 。
$ python employee.py AlexManager --address 123 Baker Street usage: employee.py [-h] [--address ADDRESS] name title employee.py: error: unrecognized arguments: Baker Street
因为123 Baker Street中间有空格 , 该脚本会把Baker Street当作其他参数 , 这里需要使用双引号 。
$ python employee.py AlexManager --address ''123 Baker Street'' Name : Alex Job Title : Manager Address : 123 Baker Street
如果name和title包含多个单词 , 则要使用双引号 。


推荐阅读