Python 标准库中的 argparse 可以根据程序中的定义,从 sys.argv 中解析参数,并且自动生成帮助信息。
一. ArgumentParser 解析器
初始化 ArgumentParser
>> import argparse
>> parser = argparse.ArgumentParser(description='Description for this command.')
添加参数
使用 add_argument 方法为应用程序添加参数,其中 add_argument 方法的参数比较多,这也使得 argparse 库的使用不够简洁,后续将继续为大家介绍更好用的命令行参数解析的开源库 click。
下面是 add_argument 方法的参数及含义总结:
| 参数 | 含义 |
|---|---|
| name / flags | 参数的名字 |
| action | 遇到参数时的动作,默认为 store
|
| nargs | 参数的个数,可以是具体的数字,也可以是 + *
|
| default | 不指定参数时的默认值 |
| type | 参数的类型 |
| choices | 参数允许的值 |
| required | 可选参数是否可以省略 |
| help | 参数的帮助信息 |
| dest | 解析后的参数名称 |
解析参数
解析参数需要使用 ArgumentParser 实例的 parse_args 方法,此方法返回一个 NameSpace 对象;可以通过访问 NameSpace 对象属性的方式获取参数值。
下面是一个简单的例子:通过 parser.server 获取 --host 选项的值,通过 parse.boolean_switch 获取 -t 选项的值。
from __future__ import print_function
import argparse
def _argparse():
parser = argparse.ArgumentParser(description='My First Command Demo.')
parser.add_argument('--host', action='store', dest='server', default='localhost', help='connect host ip')
parser.add_argument('-t', action='store_true', default=False, dest='boolean_switch', help='set a switch to True')
return parser.parse_args()
def main():
parser = _argparse()
print(parser)
print('host =', parser.server)
print('boolean_switch =', parser.boolean_switch)
if __name__ == '__main__':
main()
查看帮助信息:

python test_argparse.py --help
参数默认值:

python test_argparse.py
指定参数:

python test_argparse.py --host=127.0.0.1 -t
二. 实战:模仿 Mysql 客户端的命令行参数
from __future__ import print_function
import argparse
def _argparse():
parser = argparse.ArgumentParser(description='My python-mysql client.')
parser.add_argument('--host', action='store', dest='host', required=True, help='connect to host')
parser.add_argument('-u', '--user', action='store', dest='user', required=True, help='user for login')
parser.add_argument('-p', '--password', action='store', required=True, help='password for login')
parser.add_argument('-P', '--port', action='store', dest='port', default=3306, type=int, help='port for connect')
parser.add_argument('-v', '--version', action='version', version='%(prog)s my-0.1')
return parser.parse_args()
def main():
parser = _argparse()
conn_args = dict(host=parser.host, user=parser.user, password=parser.password, port=parser.port)
print(conn_args)
if __name__ == '__main__':
main()
注:
version选项用来打印程序的版本信息,故该选项action的取值为version。
打印帮助信息:

python my_mysql_client.py --help
打印版本信息:

python my_mysql_client.py --version
传递参数:
