Python 常用内建模块-argparse

news/2025/3/19 7:33:46/

 

目录

 argparse

小结


argparse

在命令行程序中,经常需要获取命令行参数。Python内置的sys.argv保存了完整的参数列表,我们可以从中解析出需要的参数:

python"># copy.py
import sys
print(sys.argv)
source = sys.argv[1]
target = sys.argv[2]
# TODO...

运行上述copy.py,并传入参数,打印如下:

python">['copy.py', 'source.txt', 'copy.txt']

这种方式能应付简单的参数,但参数稍微复杂点,比如可以使用-d复制目录,使用--filename *.py过滤文件名等,解析起来就非常麻烦。

为了简化参数解析,我们可以使用内置的argparse库,定义好各个参数类型后,它能直接返回有效的参数。

假设我们想编写一个备份MySQL数据库的命令行程序,需要输入的参数如下:

  • host参数:表示MySQL主机名或IP,不输入则默认为localhost
  • port参数:表示MySQL的端口号,int类型,不输入则默认为3306
  • user参数:表示登录MySQL的用户名,必须输入;
  • password参数:表示登录MySQL的口令,必须输入;
  • gz参数:表示是否压缩备份文件,不输入则默认为False
  • outfile参数:表示备份文件保存在哪,必须输入。

其中,outfile是位置参数,而其他则是类似--user root这样的“关键字”参数。

argparse来解析参数,一个完整的示例如下:

python"># backup.pyimport argparsedef main():# 定义一个ArgumentParser实例:parser = argparse.ArgumentParser(prog='backup', # 程序名description='Backup MySQL database.', # 描述epilog='Copyright(r), 2023' # 说明信息)# 定义位置参数:parser.add_argument('outfile')# 定义关键字参数:parser.add_argument('--host', default='localhost')# 此参数必须为int类型:parser.add_argument('--port', default='3306', type=int)# 允许用户输入简写的-u:parser.add_argument('-u', '--user', required=True)parser.add_argument('-p', '--password', required=True)parser.add_argument('--database', required=True)# gz参数不跟参数值,因此指定action='store_true',意思是出现-gz表示True:parser.add_argument('-gz', '--gzcompress', action='store_true', required=False, help='Compress backup files by gz.')# 解析参数:args = parser.parse_args()# 打印参数:print('parsed args:')print(f'outfile = {args.outfile}')print(f'host = {args.host}')print(f'port = {args.port}')print(f'user = {args.user}')print(f'password = {args.password}')print(f'database = {args.database}')print(f'gzcompress = {args.gzcompress}')if __name__ == '__main__':main()

输入有效的参数,则程序能解析出所需的所有参数:

python">$ ./backup.py -u root -p hello --database testdb backup.sql
parsed args:
outfile = backup.sql
host = localhost
port = 3306
user = root
password = hello
database = testdb
gzcompress = False

缺少必要的参数,或者参数不对,将报告详细的错误信息:

python">$ ./backup.py --database testdb backup.sql
usage: backup [-h] [--host HOST] [--port PORT] -u USER -p PASSWORD --database DATABASE outfile
backup: error: the following arguments are required: -u/--user, -p/--password

更神奇的是,如果输入-h,则打印帮助信息:

python">$ ./backup.py -h                          
usage: backup [-h] [--host HOST] [--port PORT] -u USER -p PASSWORD --database DATABASE outfileBackup MySQL database.positional arguments:outfileoptional arguments:-h, --help            show this help message and exit--host HOST--port PORT-u USER, --user USER-p PASSWORD, --password PASSWORD--database DATABASE-gz, --gzcompress     Compress backup files by gz.

获取有效参数的代码实际上是这一行:

python">args = parser.parse_args()

我们不必捕获异常,parse_args()非常方便的一点在于,如果参数有问题,则它打印出错误信息后,结束进程;如果参数是-h,则它打印帮助信息后,结束进程。只有当参数全部有效时,才会返回一个NameSpace对象,获取对应的参数就把参数名当作属性获取,非常方便。

可见,使用argparse后,解析参数的工作被大大简化了,我们可以专注于定义参数,然后直接获取到有效的参数输入。

小结

使用argparse解析参数,只需定义好参数类型,就可以获得有效的参数输入,能大大简化获取命令行参数的工作。


http://www.ppmy.cn/news/1580263.html

相关文章

3.17学习总结

完成了一道算法题,终于自己独立写出了一道二叉树的题了 bool isSameTree(struct TreeNode* p, struct TreeNode* q) {if(pNULL&&qNULL) return true;if(pNULL||qNULL) return false;if(p->val!q->val) return false;if(p->leftNULL&&…

【C++基础】CMake项目

CMake 项目简介 CMake 是一个跨平台的构建工具,用于管理 C/C 项目的编译过程。它通过生成标准的构建文件(如 Makefile、Visual Studio 项目文件、Ninja 构建文件等)来简化项目的构建流程。CMake 的核心是 CMakeLists.txt 文件,它…

C++输入输出流第一弹:标准输入输出流 详解(带测试代码)

目录 C输入输出流 流的四种状态(重点) 标准输入输出流 标准输入流 逗号表达式 1. 逗号表达式的基本规则 示例 2. 图片中的代码分析 关键点解析 3. 常见误区 误区 1:逗号表达式等同于逻辑与 && 误区 2:忽略输入…

4.angular 服务

服务是在controller里面引入的服务: 最好是内部服务在前面,自定义服务在后面 内部服务 $scope $scope.$watch(‘属性名’, function(newVal, oldVal) {}, true) true是深度监听,对象函数等$scope.$apply 触发页面更新,里面传入回调函数,比如说之前那个…

[Banana Pi BPI-R4] RDK 和联发科推出Wi-Fi 7 宽带 CPE 的新硬件参考平台

全新参考板可帮助运营商、CPE 制造商和应用程序开发商轻松快速地测试和推出下一代 RDK-B 路由器、网关和应用程序联发科与 RDK 合作基于 Banana Pi 开源硬件项目打造全新宽带参考板 巴黎,2024 年 10 月 3 日——在NetworkX年度会议召开之前**,** RDK 管…

网络爬虫【简介】

我叫补三补四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲爬虫 一、网络爬虫的定义 网络爬虫(Web Crawler),又称为网络蜘蛛、网络机器人等,是一种按照一定规则自动抓取互联网信息的程序或脚本。它…

IP风险度自检,互联网的安全“指南针”

IP地址就像我们的网络“身份证”,而IP风险度则是衡量这个“身份证”安全性的重要指标。它关乎着我们的隐私保护、账号安全以及网络体验,今天就让我们一起深入了解一下IP风险度。 什么是IP风险度 IP风险度是指一个IP地址可能暴露用户真实身份或被网络平台…

基于Python+Ollama DeepSeek与MySQL进行数据分析探索

目录 1、前言 2、环境准备 3、本地部署 3.1、安装ollama 3.2、部署deepseek-r1模型 4、Python接入本地模型 4.1、示例代码 4.2、附加一些功能 4.3、其他的数据库 4.3.1、PostgreSQL 示例 4.3.2、SQLite 示例 5、总结 1、前言 在当今数据驱动的时代,数据…