Python命令行参数处理:详解argparse模块

Python命令行参数处理:详解argparse模块

在Python开发中,能够处理命令行参数是一项非常实用的技能。argparse模块是Python标准库中用于解析命令行参数的模块,它能够轻松地处理复杂的命令行接口。本文将详细介绍如何使用argparse模块来处理命令行参数,包括创建脚本、定义参数、解析参数以及一些高级用法。

argparse模块简介

argparse模块提供了一种方便的方式来处理命令行参数。它能够自动生成帮助和使用手册,并且能够处理短参数和长参数。

基础用法

创建解析器

首先,需要从argparse模块导入ArgumentParser类,并创建一个解析器对象。

import argparseparser = argparse.ArgumentParser(description='这是一个示例脚本。')

添加参数

使用add_argument方法来添加命令行参数。

parser.add_argument('echo', help='重复输入的字符串')
parser.add_argument('--verbosity', help='增加输出的详细程度', action='store_true')
parser.add_argument('-o', '--output', help='输出文件')

解析参数

使用parse_args()方法来解析命令行参数。

args = parser.parse_args()

使用参数

根据解析出的参数执行相应的操作。

if args.verbosity:print("详细模式开启")
if args.output:with open(args.output, 'w') as f:f.write(args.echo)
else:print(args.echo)

高级用法

默认值和类型检查

可以为参数指定默认值和类型。

parser.add_argument('--version', action='version', version='%(prog)s 2.0')
parser.add_argument('integers', metavar='N', type=int, nargs='+',help='一个或多个整数')

可选参数和位置参数

可选参数通常以---开头,位置参数则没有。

parser.add_argument('-t', '--test', action='store_const', const=value, default=another_value)
parser.add_argument('files', nargs='*', help='输入文件')

子命令

argparse支持子命令,类似于git命令的addcommit等。

subparsers = parser.add_subparsers(help='子命令帮助')# 创建第一个子命令的解析器
parser_a = subparsers.add_parser('a', help='a 子命令帮助')
parser_a.add_argument('foo', help='foo 参数')# 创建第二个子命令的解析器
parser_b = subparsers.add_parser('b', help='b 子命令帮助')
parser_b.add_argument('bar', help='bar 参数')

定制帮助信息

可以定制帮助信息的显示方式。

parser.formatter_class = argparse.RawDescriptionHelpFormatter
parser.description = textwrap.dedent('''这个脚本用于演示 argparse 模块。它提供了一个非常灵活的命令行接口。
''')

参数冲突处理

argparse能够处理参数冲突,并给出错误提示。

parser.add_argument('--foo', help='foo 的参数')
parser.add_argument('-f', action='store_true',help='-f 和 --foo 不能同时使用')

实际应用案例

假设我们需要编写一个脚本,用于处理文本文件,并支持多种操作,如查看、复制、删除等。

import argparse# 创建解析器
parser = argparse.ArgumentParser(description='文本文件处理器')# 添加子命令
subparsers = parser.add_subparsers(dest='command', help='可用的命令')# 创建查看子命令
parser_view = subparsers.add_parser('view', help='查看文件内容')
parser_view.add_argument('file', help='要查看的文件')# 创建复制子命令
parser_copy = subparsers.add_parser('copy', help='复制文件')
parser_copy.add_argument('source', help='源文件')
parser_copy.add_argument('destination', help='目标文件')# 解析参数
args = parser.parse_args()# 根据子命令执行操作
if args.command == 'view':with open(args.file, 'r') as f:print(f.read())
elif args.command == 'copy':with open(args.source, 'r') as f:data = f.read()with open(args.destination, 'w') as f:f.write(data)

结论

argparse模块是Python中处理命令行参数的强大工具。它不仅能够简化参数解析的过程,还能够自动生成帮助和使用手册,支持短参数和长参数,以及复杂的子命令结构。通过本文的介绍和示例,你应该能够掌握argparse模块的基础和高级用法,从而编写出功能强大且用户友好的命令行程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOV10训练自己的数据集

*************************************************** 码字不易,收藏之余,别忘了给我点个赞吧! *************************************************** Start YOLOV10训练自己的数据集 官方论文:https://arxiv.org/abs/2405…

使用busybox快速创建rootfs系统(硬件:atk-dl6y2c)

目录 概述 1 编译busybox 1.1 配置Makefile 1.2 需改参数 1.3 配置busybox 1.4 编译busybox 2 完善 rootfs下文件 2.1 rootfs 的“/lib”目录添加库文件 2.2 rootfs 的“usr/lib”目录添加库文件 2.3 创建其他目录 3 完善其他文件 3.1 完善etc/init.d/rcS 3.2 完善…

Golang | Leetcode Golang题解之第128题最长连续序列

题目: 题解: func longestConsecutive(nums []int) int {numSet : map[int]bool{}for _, num : range nums {numSet[num] true}longestStreak : 0for num : range numSet {if !numSet[num-1] {currentNum : numcurrentStreak : 1for numSet[currentNum…

【CMake】CMake入门(五)打包安装程序 使用CMake管理库 打包调试版和发行版

本篇文章不是新手入门教学文章,主要是记录笔者个人的学习笔记 CMake入门(五) 一、打包二、使用CMake管理库三、打包调试版和发行版 一、打包 发布程序可以有多种形式,比如安装包、压缩包、源文件等。CMake也提供了打包程序cpack可…

YOLOv8训练自定义项目

训练内容:基于yolo的筒纱实例分割 数据设置: 1)https://ultralytics.com/assets/coco8-seg.zip,下载coco8-seg.zip,解压,记住各个文件夹内的文件名(12为为长度,如000000000001.jpg…

8、架构-分布式的共识

概述 在正式探讨分布式环境中面临的各种技术问题和解决方案前,我 们先把目光从工业界转到学术界,学习几种具有代表性的分布式共识 算法,为后续在分布式环境中操作共享数据准备好理论基础。下面笔 者从一个最浅显的场景开始,引出本…

金钱的认知,你如何理解呢?

金钱的认知 建立在金钱之上的爱情是纯真的爱,朋友关系也才够纯粹,才是单纯的世界,反之没了钱的条件爱情和友情的美好关系极易破碎,也极易反目成仇。 心若美好钱就美好,心有欲望狰狞钱就是只咬人的老虎,钱…

python练习五

Title1:请实现一个装饰器,每次调用函数时,将函数名字以及调用此函数的时间点写入文件中 代码: import time time time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 获取当前的时间戳 # 定义一个有参装饰器来实…

Linux 僵尸进程和孤儿进程

一.Z(zombie)-僵尸进程 1.僵死状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用后)没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 2.僵死进程会以终止状态保持在进程表中,并且会…

【代码随想录37期】Day24 回溯 组合

理论基础 回溯是一种搜索方式,通常通过穷举来解决问题,核心思想是从一个初始状态出发、暴力搜索所有可能的方案,遇到正确的解法则记录下来,直到结束,这是一个典型的深度优先搜索思想:不撞南墙不回头 回溯…

Java17 --- SpringCloud之seate

目录 一、创建seata需要的mysql数据库表 二、修改seata的配置文件 三、启动nacos及seata 四、创建需要的数据库及表 一、创建seata需要的mysql数据库表 CREATE DATABASE seata;CREATE TABLE IF NOT EXISTS global_table(xid VARCHAR(128) NOT NULL,…

C++ | Leetcode C++题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int> num_set;for (const int& num : nums) {num_set.insert(num);}int longestStreak 0;for (const int& num : num_set) {…

隐马尔可夫链

1 马尔可夫链 马尔科夫链&#xff08;Markov Chain&#xff09;是一种数学模型&#xff0c;它描述了一系列可能事件的概率&#xff0c;其中每个事件的发生仅依赖于前一个事件的状态。这一特性称为“无记忆性”或“马尔可夫性质”。我将用一个简单的天气预测模型作为例子来解释马…

【组合数学 隔板法 容斥原理】放球问题

本文所属分类 组合数学汇总 8类放球问题 放球问题是一类很有意思的排列组合问题。通俗来说&#xff0c;就是把n个小球放到m个盒子里&#xff0c;问有几种放法。具体可以从3个维度&#xff0c;每个维度2种情况&#xff0c;共8种情况&#xff1a; 维度一&#xff1a;小球是否相…

对象业务的追加写接口

类似文件的追加写操作&#xff0c;在对象的末尾增加新的数据内容。 本文有如下假定&#xff1a; 对象存储服务基于文件语义实现。使用PUT方式上传的对象&#xff0c;内部使用一个文件和对应的元数据来承载。使用多段方式上传的对象&#xff0c;内部使用多个段文件、元数据来承…

【面试题-012】什么是Spring 它有哪些优势

文章目录 Spring有哪些优势有哪些优势Spring和Springboot区别在 Spring 框架中&#xff0c;什么是AOP核心概念应用场景 Spring有哪些通知类型 Spring 是一个开源的 Java 平台&#xff0c;由 Rod Johnson 创建&#xff0c;用于简化企业级 Java 应用程序的开发。它于 2003 年首次…

T-Pot多功能蜜罐实践@debian12@FreeBSD

T-Pot介绍 T-Pot是一个集所有功能于一身的、可选择分布式的多构架&#xff08;amd64&#xff0c;arm64&#xff09;蜜罐平台&#xff0c;支持20多个蜜罐和很多可视化选项&#xff0c;使用弹性堆栈、动画实时攻击地图和许多安全工具来进一步改善欺骗体验。GitHub - telekom-sec…

15.FreeRTOS数据结构:StreamBuffer,MessageBuffer和Queue的区别

FreeRTOS数据结构&#xff1a;StreamBuffer&#xff0c;MessageBuffer和Queue的区别 介绍 在嵌入式系统开发中&#xff0c;任务间的通信是非常重要的一部分。FreeRTOS提供了多种数据结构来实现任务间的通信&#xff0c;包括StreamBuffer&#xff0c;MessageBuffer和Queue。这…

SpringBootWeb登录认证

JWT令牌 JSON Web Token JSON Web Tokens - jwt.ioJSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is digitally signed using JSON Web Signatur…

MogDBopenGauss查询重写规则uniquecheck

在MogDB&openGauss中&#xff0c;参数rewrite_rule用于控制查询重写&#xff0c;本文介绍查询重写规则uniquecheck uniquecheck表示提升无agg的where子查询 现在有如下例子 orcl> explain analyze select count(*)from test01 t1where t1.data_object_id (select data…