菜鸟教程《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…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...