python命令行解析argparse操作

目录

一、使用sys.argv

二、使用argparse模块

更多功能:

三、使用getopt模块

四、使用argparse模块来处理布尔型参数

1.使用store_true和store_false动作

2.自定义布尔型参数的处理


一、使用sys.argv

在python中sys.argv是一个包含命令行参数的列表。其中sys.argv[0]是脚本自身的名称,从sys.args[1]开始之后的是传递给脚本的参数。这种方式比较简单直接,但是对于复杂的参数解析可能不太方便。

假如我们有一个名为test.py的脚本

import sys
print('脚本名称:', sys.argv[0])
print('参数列表:',sys.atgv[1:])

如果在命令行中运行python test.py arg1 arg2,输出的结果为:

     脚本名称: test.py参数列表: ['arg1', 'arg2']

二、使用argparse模块

argparse模块是python标准库中一个用于命令行参数解析的高级工具。它可以帮助你轻松地定义程序所需的参数,包括参数的名称、类型、帮助信息、默认值等,并且会自动生成帮助文档

1.首先需要创建一个ArgumentParser对象

import argparse
parse=argparse.ArgumentParser(description='这是一个示例程序')

2.添加参数:可以通过add_argument方法添加各种参数,例如添加一个整形的参数和一个字符串类型的可选参数

parser.add_argument('num', type=int, help='添加一个整形参数')
parser.add_argument('-s', '--string', type=str, defult='默认字符串', help='一个可选的字符串参数')

3.解析参数

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

args=parser.parse_args()
print('整形参数:', args.num)
print('字符串参数:', args.string)

假设这个脚本名为argparse_demo.py,在命令行中运行python argparse_demo.py 5 -s custom_string,输出将会是:

       整数参数: 5字符串参数: custom_string

更多功能:

1.互斥参数:可以定义互斥的参数组。例如,定义一个程序,要么接受--input-file参数,要么接受--input-url参数,但不能同时接受两者

         input_group = parser.add_mutually_exclusive_group(required=True)input_group.add_argument("--input-file", type=str, help="输入文件路径")input_group.add_argument("--input-url", type=str, help="输入URL")

子命令:argparse还支持子命令。例如,一个命令行工具可能有不同的子命令,如initstartstop等,每个子命令可以有自己的一组参数。

         subparsers = parser.add_subparsers(dest="command")init_parser = subparsers.add_parser("init", help="初始化操作")init_parser.add_argument("--config", type=str, help="配置文件路径")start_parser = subparsers.add_parser("start", help="启动操作")start_parser.add_argument("--port", type=int, help="端口号")

三、使用getopt模块

getopt模块提供了一种类似于c语言getopt函数的方式来处理命令行参数。它主要通过解析命令行参数列表中的选项(以短选项或者长选项的形式)来工作

     import getoptimport sysdef main(argv):try:opts, args = getopt.getopt(argv, "hi:o:", ["ifile=", "ofile="])except getopt.GetoptError:print('test.py -i <inputfile> -o <outputfile>')sys.exit(2)input_file = Noneoutput_file = Nonefor opt, arg in opts:if opt == '-h':print('test.py -i <inputfile> -o <outputfile>')sys.exit()elif opt in ("-i", "--ifile"):input_file = argelif opt in ("-o", "--ofile"):output_file = argprint('输入文件:', input_file)print('输出文件:', output_file)if __name__ == "__main__":main(sys.argv[1:])

 这个脚本接受-i(或--ifile)和-o(或--ofile)两个选项,用于指定输入文件和输出文件。运行方式类似python test.py -i input.txt -o output.txt。不过,argparse在大多数情况下更推荐使用,因为getopt相对来说更复杂且功能没有argparse强大。

四、使用argparse模块来处理布尔型参数

1.使用store_true和store_false动作

argparse模块中,当添加参数时,可以通过action参数指定参数的行为。对于布尔型参数,store_truestore_false是最常用的动作。store_true表示如果该参数在命令行中出现,对应的变量将被设置为Truestore_false则相反,若参数出现,变量被设置为False

     import argparseparser = argparse.ArgumentParser(description="布尔型参数示例")# 添加一个布尔型参数,默认为False,当参数出现时为Trueparser.add_argument("--verbose", action="store_true", default=False, help="是否开启详细输出")args = parser.parse_args()if args.verbose:print("详细输出已开启")else:print("详细输出未开启")
  • 当在命令行中运行python script.py(没有--verbose参数)时,输出为详细输出未开启
  • 当运行python script.py --verbose时,输出为详细输出已开启

2.自定义布尔型参数的处理

可以通过自定义类型转换函数来处理布尔型参数。这种方式更灵活,适用于需要对参数数值进行更复杂验证或者转换的情况

 

     import argparsedef str2bool(v):if isinstance(v, bool):return vif v.lower() in ('yes', 'true', 't', 'y', '1'):return Trueelif v.lower() in ('no', 'false', 'f', 'n', '0'):return Falseelse:raise argparse.ArgumentTypeError('布尔值预期')parser = argparse.ArgumentParser(description="自定义布尔型参数示例")# 添加一个自定义类型转换的布尔型参数parser.add_argument("--active", type=str2bool, default=False, help="是否激活")args = parser.parse_args()if args.active:print("已激活")else:print("未激活")
  • 当在命令行中运行python script.py(没有--active参数)时,输出为未激活
  • 当运行python script.py --active true或者python script.py --active yes等合法的真值形式时,输出为已激活
  • 当运行带有非法布尔值的命令行参数时,如python script.py --active maybe,会抛出argparse.ArgumentTypeError异常,提示布尔值预期

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

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

相关文章

跨越数字鸿沟,FileLink文件摆渡系统——您的数据安全高效传输新选择

在这个信息爆炸的时代&#xff0c;数据的流通与共享已成为推动各行各业发展的关键力量。然而&#xff0c;随着数据量的激增&#xff0c;如何在保证数据安全的前提下&#xff0c;实现高效、便捷的文件传输&#xff0c;成为了众多企业和个人用户面临的重大挑战。正是在这样的背景…

zabbix 迁移数据目录

由于安装zabbix的时候数据目录给小了&#xff0c;现在决定迁移数据目录 一&#xff1a;查找数据目录 这个数据目录我们只需要看数据库的配置文件就行&#xff0c;my,cnf datadir指向的就是数据目录 ls /var/lib/mysql/ 二&#xff1a;创建新的数据目录 mkdir /monitor/ …

大数据实验3: HDFS基础编程 (shell命令、JAVA API使用)

实验3&#xff1a; HDFS基础编程 一、实验目的 HDFS的shell命令使用HDFS的JAVA API使用&#xff1b; 二、实验平台 操作系统&#xff1a;Linux&#xff08;Ubuntu16.04&#xff09;&#xff1b;Hadoop版本&#xff1a;3.3.1&#xff1b;JDK版本&#xff1a;1.8&#xff1b;…

C++20中头文件source_location的使用

<source_location>是C20中新增加的头文件&#xff0c;此头文件是utility库的一部分。 主要内容为类std::source_location&#xff1a;表示有关源代码的某些信息&#xff0c;例如文件名(__FILE__)、行号(__LINE__)和函数名(__func__)。 以下为测试代码&#xff1a; names…

交易之路:如何找到适合自己的交易品种

大部分新手交易者最容易陷入的误区就是盲目跟风&#xff0c;他们倾向于选择那些被众人追捧且看似成功的交易品种&#xff0c;认为既然大家都在做&#xff0c;那么一定有利可图。然而&#xff0c;他们忽略了交易品种选择的核心原则&#xff1a;基于个人的深入测试与理解&#xf…

传统企业营销新起点:百科词条构建基础策略!

合作咨询联系竑图 hongtu201988 搜索你的企业名称&#xff0c;出现的结果是什么&#xff1f;是否大部分都是信用网站的基础注册信息&#xff1f;没有正面的企业形象展示&#xff1f; 如果企业做了百度词条呢&#xff1f;会是一个什么结果呢&#xff1f; 以上两种结果带给大家的…

百度智能云千帆 ModelBuilder 大模型服务及开发解读

本文整理自百度云智峰会 2024 —— 大模型平台技术实践论坛的同名演讲。 更多大会演讲内容&#xff0c;请访问&#xff1a; https://cloud.baidu.com/summit/AIcloudsummit_2024/index.html 最近大模型产业应用圈子里有一句非常流行的话&#xff0c;叫做度日如年。不是说这件…

自动化检查网页的TDK,python+selenium自动化测试web的网页源代码中的title,Description,Keywords

首先&#xff0c;TDK是什么&#xff1f;对于新手小白来说&#xff0c;可能是懵逼的&#xff0c;所以这里给出一个官方的解说‌网页的TDK是指标题&#xff08;Title&#xff09;、描述&#xff08;Description&#xff09;和关键词&#xff08;Keywords&#xff09;的集合‌。这…

【服务器】服务器 BMC(基板管理控制器,Baseboard Management Controller)

基板管理控制器&#xff08;BMC&#xff0c;Baseboard Management Controller&#xff09;是用于监控和管理服务器的专用控制器&#xff0c;用通俗的话讲&#xff0c;BMC 是主机服务器系统下的一个独立系统。这个独立系统有自己的处理器和内存&#xff0c;即使主机硬件或操作系…

开源限流组件分析(一):juju/ratelimit

文章目录 本系列前言数据结构对外提供接口初始化令牌桶获取令牌 核心方法adjustavailableTokenscurrentTicktakeTakeAvailableWait系列 本系列 开源限流组件分析&#xff08;一&#xff09;&#xff1a;juju/ratelimit&#xff08;本文&#xff09;开源限流组件分析&#xff0…

Race Track Generator Ultimate:Race Track Generator(赛车场赛道看台场景创建工具)

下载&#xff1a;​​Unity资源商店链接资源下载链接 效果图&#xff1a;

【论文阅读】Bi-Mamba+: Bidirectional Mamba for Time Series Forecasting

文章目录 概要阅读背景知识引言创新之处 研究方法概述方法部分的核心模块多尺度打补丁&#xff08;Multi-Scale Patching&#xff09;Mamba&#xff1a;全局模式专家Local Window Transformer&#xff08;LWT&#xff09;&#xff1a;局部变化专家长短期路由器&#xff08;Long…

Bootstrap Blazor实现多个Select选择器联合选择

Bootstrap Blazor官方目前只提供单个Select选择器&#xff0c;如果要想实现下图所示的多个Select选择器联合选择&#xff0c;则需要通过编写自定义组件来实现。 主要通过Bootstrap的data-bs-toggle属性来实现展开和折叠效果。 .razor文件内容如下&#xff1a; typeparam TValu…

【路径规划】蚁群算法的优化计算——旅行商问题(TSP)优化

摘要 旅行商问题&#xff08;TSP&#xff09;是一种经典的组合优化问题&#xff0c;其目标是找到一条遍历所有城市且总路程最短的环路。由于其计算复杂度高&#xff0c;求解大规模TSP问题往往依赖于启发式算法。本文研究了基于蚁群算法&#xff08;Ant Colony Optimization, A…

034_基于php万怡酒店管理系统

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

python之数据结构与算法(数据结构篇)-- 字典

一、字典的概念 这里我使用“小羊们”举例子&#xff0c;现在我需要去创建一个"羊村小羊们的身高"字典去保存小羊们的身高&#xff0c;对小羊们的身高进行查询、增加、删除、遍历等一系列操作。去更好的理解&#xff0c;字典是个什么东东&#xff01;&#xff01;&…

Java根据word 模板,生成自定义内容的word 文件

Java根据word 模板&#xff0c;生成自定义内容的word 文件 背景1 使用技术2 实现方法依赖啊 3 问题4 背景 主要是项目中需要定制化一个word&#xff0c;也就是有一部分是固定的&#xff0c;就是有一个底子&#xff0c;框架&#xff0c;里面的内容是需要填充的。然后填充的内容…

宝塔部署前后端分离若依项目--CentOS7版

准备&#xff1a; CentOS7服务器一台 通过网盘分享的文件&#xff1a;CentOS 7 h 链接: https://pan.baidu.com/s/17DF8eRSSDuj9VeqselGa_Q 提取码: s7x4 大家有需要可以下载这个&#xff0c;密码61 若依前端编译后文件 通过网盘分享的文件&#xff1a;ruoyi-admin.jar 链…

基于SSM网络在线考试系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;在线考试管理&#xff0c;试题管理&#xff0c;考试管理&#xff0c;系统管理 前台账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;在线考试&#xff0c;公告信…

基于微信小程序的购物系统【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…