Python 命令行(三)- 命令行参数解析

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

传递参数:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容