菜鸟教程《Python 3 教程》笔记 EX 01:命令行参数
菜鸟教程《Python 3 教程》笔记 EX 01:命令行参数
- 1 命令行参数
- 1.1 基础用法
- 1.2 getopt 模块
- 1.2.1 getopt.getopt 方法
- 1.2.2 getopt.gnu_getopt 方法
- 1.2.3 Exception getopt.GetoptError
- 1.2.4 exception getopt.error
笔记带有个人侧重点,不追求面面俱到。
1 命令行参数
出处: 菜鸟教程 - Python3 命令行参数
1.1 基础用法
Python 中可以所用 sys 的 sys.argv 来获取命令行参数:
注意:
sys.argv[0]为脚本名。
实例:
test.py 文件:
#!/usr/bin/python3import sysprint ('参数个数为:', len(sys.argv), '个参数。')
print ('参数列表:', str(sys.argv))
print ('脚本名:', str(sys.argv[0]))
运行结果:
>> python test.py arg1 arg2 arg3
参数个数为: 4 个参数。
参数列表: ['test.py', 'arg1', 'arg2', 'arg3']
脚本名: test.py
1.2 getopt 模块
getopt 模块是专门处理命令行参数的模块,用于获取命令行选项和参数。该模块提供了两个方法及一个异常处理来解析命令行参数。
1.2.1 getopt.getopt 方法
语法:
getopt.getopt(args, shortopts, longopts=[])
参数:
args:要解析的命令行参数列表;shortopts:接收字符串,解析为“短选项”。shortopts 后的冒号 : 表示该选项必须有附加的参数,不带冒号表示该选项不附加参数;longopts:接收列表,解析为“长选项”。longopts 后的等号 = 表示如果设置该选项,必须有附加的参数,否则就不附加参数。
返回值:
opts:由元组 (opt, value) 组成的列表。例如输入"-h -i inputfile -o outputfile" 返回值就是 [(‘-h’, ‘’), (‘-i’, ‘inputfile’), (‘-o’, ‘outputfile’)];args:参数(value)列表,包含除了长选项和短选项以及各自选项的参数以外的其他未知的参数。
注意:
- 长选项和短选项以及各自的参数都会按先后次序放在
opts中;- 返回的
opt里面,-和--都被保留下来了;- 长选项没有写完的时候,会被自动补全。比如用户输入的是
--u,通过 getopt 会被自动补全成--user。
实例:
# test.pyimport sys
import getoptdef site():argv = sys.argv[1:] # 以空格分割的字符串列表try:opts, args = getopt.getopt(argv, "abn:u:", ["name=", "url="])# 长选项模式except Exception as err:print(err)print("opts: ", opts)print("args: ", args)if __name__ == "__main__":site()
输出:
1)正常使用
>>> python test.py -a -b -u item1 -n item2 --n item3 --url item4
opts: [('-a', ''), ('-b', ''), ('-u', 'item1'), ('-n', 'item2'), ('--name', 'item3'), ('--url', 'item4')]
args: []
2)只输入参数
>>> python test.py item1 item2
opts: []
args: ['item1', 'item2']
3)只输入选项
>>> python test.py -a
opts: [('-a', '')]
args: []>>> python test.py -n
option -n requires argument # 报错
4)错误输入选项
>>> python test.py -
opts: []
args: ['-']>>> python test.py --
opts: []
args: []>>> python test.py ---
option --- not recognized # 报错>>> python test.py -c
option -c not recognized # 报错>>> python test.py ---b
option ---b not recognized # 报错>>> python test.py -n-a
opts: [('-n', '-a')]
args: []>>> python test.py -a-n
option -- not recognized # 报错>>> python test.py -a--n
option -- not recognized # 报错
5)错误输入参数
>>> python test.py -a item
opts: [('-a', '')]
args: ['item']>>> python test.py -aitem
option -i not recognized # 报错>>> python test.py -antem
opts: [('-a', ''), ('-n', 'tem')]
args: []>>> python test.py -abntem
opts: [('-a', ''), ('-b', ''), ('-n', 'tem')]
args: []>>> python test.py -acntem
option -c not recognized>>> python test.py -n item1 -a item2 --n item3
opts: [('-n', 'item1'), ('-a', '')]
args: ['item2', '--n', 'item3']>>> python test.py -n item1 item2 -a
opts: [('-n', 'item1')]
args: ['item2', '-a']>>> python test.py item1 item2 -a
opts: []
args: ['item1', 'item2', '-a']
总结:(欢迎指正、补充)
- 命令行参数从左到右、依次解析;
- 一般情况下以空格分割选项和参数,附加参数的短选项后紧跟的参数也可以被解析,例如:
-nitem; - 解析时,先碰到未定义的选项时,会报错,先碰到多余的参数时,之后的参数都被放入返回值
args中; - 短选项可以采用
-abn的样式输入,无附加参数的选项必须在前,否则会报错。
1.2.2 getopt.gnu_getopt 方法
语法:
getopt.gnu_getopt(args, shortopts, longopts=[])
此函数与 getopt() 类似,区别在于它默认使用 GNU 风格的扫描模式。这意味着选项和非选项参数可能会混在一起。getopt() 函数将在遇到非选项参数时立即停止处理选项。
如果选项字符串的第一个字符为 +,或者如果设置了环境变量 POSIXLY_CORRECT,则选项处理会在遇到非选项参数时立即停止。
1.2.3 Exception getopt.GetoptError
当参数列表中出现不可识别的选项或者当一个需要参数的选项未带参数时将引发此异常。此异常的参数是一个指明错误原因的字符串
对于长选项,将一个参数传给不需要参数的选项也将导致引发此异常。(没发现)
msg 和 opt 属性会给出错误消息和关联的选项;如果没有关联到异常的特定选项,则 opt 将为空字符串。
报错 1:
需要参数的选项未带参数。
报错 2:
如果 longopts 为 [‘foo’, ‘frob’],则选项 --fo 将匹配为 --foo,但 --f 将不能得到唯一匹配,因此将引发 GetoptError。
1.2.4 exception getopt.error
GetoptError 的别名,用于向后兼容。
扩展阅读: 《Python 官方文档》:getopt — C 风格的命令行选项解析器
相关文章:
菜鸟教程《Python 3 教程》笔记 EX 01:命令行参数
菜鸟教程《Python 3 教程》笔记 EX 01:命令行参数 1 命令行参数1.1 基础用法1.2 getopt 模块1.2.1 getopt.getopt 方法1.2.2 getopt.gnu_getopt 方法1.2.3 Exception getopt.GetoptError1.2.4 exception getopt.error 笔记带有个人侧重点,不追求面面俱到…...
NLP(六十六)使用HuggingFace中的Trainer进行BERT模型微调
以往,我们在使用HuggingFace在训练BERT模型时,代码写得比较复杂,涉及到数据处理、token编码、模型编码、模型训练等步骤,从事NLP领域的人都有这种切身感受。事实上,HugggingFace中提供了datasets模块(数据处…...
Rabbitmq消息积压问题如何解决以及如何进行限流
一、增加处理能力 优化系统架构、增加服务器资源、采用负载均衡等手段,以提高系统的处理能力和并发处理能力。通过增加服务器数量或者优化代码,确保系统能够及时处理所有的消息。 二、异步处理 将消息的处理过程设计为异步执行,即接收到消息…...
Lambda方法引用
1、体验方法引用 在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿参数做操作那么考虑一种情况:如果我们在Lanbda中所指定的操作方案,已经有地方存在相同方案,那是否还有必要再重复逻辑呢&#…...
TCP协议报文
前言 TCP/IP协议簇——打开虚拟世界大门中,已经给大家大致介绍了TCP/IP协议簇的分层。 TCP (Transmission Control Protocol)传输控制协议,在TCP/IP协议簇中,处于传输层。是为了在不可靠的互联网络(IP协议)中&#x…...
C# 如何将使用的Dll嵌入到.exe应用程序中?
文章目录 前言详细实操简要步骤 前言 有没有想自己开发的exe保留一点神秘,不想让他人知道软件使用了哪些dll; 又或许是客户觉得一个软件里面的dll文件太多了,能不能简单一点,直接双击.exe就可以直接运行了,别搞那么多乱七八糟的。…...
【LeetCode】剑指 Offer Ⅱ 第5章:哈希表(6道题) -- Java Version
题库链接:https://leetcode.cn/problem-list/e8X3pBZi/ 类型题目解决方案哈希表的设计剑指 Offer II 030. 插入、删除和随机访问都是O(1) 的容器HashMap ArrayList ⭐剑指 Offer II 031. LRU 缓存HashMap 双向链表 ⭐哈希表的应用剑指 Offer II 032. 有效的变位…...
x86 汇编手册快速入门
本文翻译自:Guide to x86 Assembly 在阅读 Linux 源码之前,我们需要有一些 x86 汇编知识。本指南描述了 32 位 x86 汇编语言编程的基础知识,包括寄存器结构,数据表示,基本的操作指令(包括数据传送指令、逻…...
WPF C# Binding绑定不上的解决情况
Binding绑定不上的一般解决情况: 1.添加上下文 DataContext d:DataContext"{d:DesignInstance Typelocal:CommSettingView}"2.添加相对位置 RelativeSource Command"{Binding SaveCommand, RelativeSource{RelativeSource AncestorTypeUserContr…...
【UE 材质】实现方形渐变、中心渐变材质
步骤 一、实现方形渐变 1. 新建一个材质,材质域选择“后期处理” 2. 通过“Mask”节点单独获取R、G通道,可以看到R通道是从左到右0~1之间的变化,对应U平铺 可以看到G通道是从上到下0~1之间的变化,对应V平铺 3. 完善如下节点 二、…...
PHP旅游管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页
一、源码特点 PHP 旅游管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 PHP 旅游管理系统 源码下载地址: https://download.csdn.net/download/qq_41…...
java内存模型讨论及案例分析
常用内存选项 -Xmx: 最大堆大小 -Xms:最小堆大小 -Xss :线程堆栈大小,默认1M 生产环境最好保持 Xms Xmx java内存研究 内存布局 可见: 堆大小 新生代 老年代,新生代EFrom SurvivorTo Survivor。新…...
对战ChatGPT,创邻科技的Graph+AI会更胜一筹吗?
大模型(大规模语言模型,即Large Language Model)的应用已经成为千行百业发展的必然。特定领域或行业中经过训练和优化的企业级垂直大模型则成为大模型走下神坛、真正深入场景的关键之路。 但是,企业级垂直大模型在正式落地应用前…...
9月2日,每日信息差
1、墨迹天气发布全球雷达融合降水服务产品。据介绍,该产品基于机器学习技术,对全球气象雷达观测图片进行智能识别去噪和外推,并融合全球气象模式、卫星等数据,提供全球范围公里级、分钟级降水预报,可围绕降水灾害的不同…...
uni-app之android项目云打包
1,项目根目录,找到mainfest.json,如果appid是空的,需要生成一个appid 2,点击重新获取appid,这个时候需要登录,那就输入账号密码登录下 3,登陆后可以看到获取appid成功 4,…...
C++的智能指针和可变参数模板详解
智能指针 1. 垃圾回收 垃圾回收机制已经大行其道,得到了诸多编程语言的支持,例如Java、Python、 C#、PHP等。而C虽然从来没有公开得支持过垃圾回收机制,但C98/03标准中,支持使用auto_ptr智能指针来实现堆内存的自动回收; C11新标…...
Docker及常用数据库安装
Docker安装常用数据库 1、Docker安装2、Mysql安装3、Redis安装4、DM安装5、Oracle安装1、Docker安装 1、确保 yum 包更新到最新yum update2、卸载旧版本(如果安装过旧版本的话)yum remove docker docker-common docker-selinux docker-engine3、安装需要的软件包, yum-util 提…...
前端使用 JavaScript 检测用户是否在线的6种方法
要检测用户是否在线,可以使用以下几种方法: 1. 使用navigator.onLine属性: navigator.onLine是一个布尔值,表示用户是否与互联网连接。当用户在线时,该属性的值为true,当用户离线时,该属性的值…...
Windows下Redis的安装
文章目录 一,Redis介绍二,Redis下载三,Redis安装-解压四,Redis配置五,Redis启动和关闭(通过terminal操作)六,Redis连接七,Redis使用 一,Redis介绍 远程字典服务,一个开源的,键值对形式的在线服务框架,值支持多数据结构,本文介绍windows下Redis的安装,配置相关,官网默认下载的是…...
SpringBoot第45讲:SpringBoot定时任务 - Timer实现方式
SpringBoot第45讲:SpringBoot定时任务 - Timer实现方式 定时任务在实际开发中有着广泛的用途,本文是SpringBoot第45讲,主要帮助你构建定时任务的知识体系,同时展示Timer 的schedule和scheduleAtFixedRate例子;后续的文章中我们将逐一介绍其它常见的定时任务,并与SpringBo…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
