Python教程:命令行参数处理

article/2025/7/1 16:19:51

sys模块

sys模块代表了Python解释器,主要用于获取和Python解释器相关的信息,其中 sys.argv 可以获取命令行参数

在Python交互式解释器中可以先导入sys模块 import sys,再输入 dir(sys) 查看sys模块所包含的全部程序单元(包括变量、函数等),或者[i for i in dir(sys) if not i.startswith('_')]过滤掉隐藏的单元

在这里插入图片描述
常用单元

sys.argv:以列表的方式获取运行 Python 程序的命令行参数存放其中。其中 sys.argv[0] 通常就是指该 Python程序本身,sys.argv[1] 代表第一个参数,sys.argv[2] 代表第二个参数,以此类推。类似于 Shell 中的 $0、$1、$2

import sys
print('程序名称为:{},第一个参数为:{},第二个参数为:{}'.format(sys.argv[0], sys.argv[1], sys.argv[2]))
  • sys.byteorder:显示本地字节序的指示符。如果本地字节序的大端模式,则该属性返回big,否则返回little

  • sys.copyright:该属性返回与 Python 解释器有关的版权信息

  • sys.executable:该属性返回 Python 解释器在磁盘上的存储路径

  • sys.exit():通过引发SystemExit异常来退出程序,将其放在try块中不能阻止finally块的执行。

  • sys.flags:该只读属性返回运行Python命令时指定的旗标

  • sys.getfilesystemencodiing():返回在当前系统中保存文件所用的字符集

  • sys.getrefcount():返回指定对象的引用计数。

  • sys.getrecursionlimit():返回Python解释器当前支持的递归深度。该属性可通过setrecursionlimit()方法重新设置

  • sys.getswitchinterval():返回在当前Python解释器中线程切换的时间间隔。该属性可通过setswitchinterval()函数改变

  • sys.implementation:返回当前Python解释器的实现

  • sys.maxsize:返回Python整数支持的最大值。在32位平台上,该属性值为 2 ×× 31-1;在64位平台上,该属性值为 2 ×× 63-1

  • sys.path:该属性指定Python查找模块的路径列表。程序可通过修改该属性来动态增加Python加载模块的路径

  • sys.platfrom:返回Python解释器所在的平台的标识符

  • sys.stdin:返回系统的标准输入流——一个类文件对象

  • sys.stdout:返回系统的标准输出流——一个类文件对象

  • sys.stderr:返回系统的错误输出流——一个类文件对象

  • sys.version:返回当前Python解释器的版本信息

  • sys.winver:返回当前Python解释器的主版本号

  • sys.copyright:返回当前Python解释器的版权信息

getopt模块

getopt是对sys.argv获取的命令行参数进行二次处理。在运行程序时,可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能,比如 -u 代表后面是用户,-p 代表后面是密码。

举个例子

## fileName: test.py
import sys, getopt
opts, args = getopt.getopt(sys.argv[1:], "hu:", ["help", "file="])
print("opts输出结果为", opts)
print("args输出结果为", args)
  • 调用getopt.getopt()会返回两个列表,第一个列表赋值给opts,第二个列表赋值给args:
    opts:是 (选项, 选项值) 的元组为一个元素的列表。如果没有选项值为空字符串
    args:存放没用选项单参数的列表。不属于格式信息的剩余的命令行参数
  • 使用 sys.argv[1:] 是为过滤第一个参数(第一个参数为Python程序本身)
  • “hu:” 为定义短格式选项(-)。这里的h和u为两个选项。“h” 后面没有 “:” 表示h这个选项没有选项值,是作为开关选项(比如:有 -h 为显示帮助信息,没有 -h 为不显示帮助信息)。“u:” 后面有 “:” 为必须有选项值
  • [“help”, “file=”] 为定义长格式选项(–)。这里的 “=” 和上面的短格式选项中的 “:” 一样

执行的例子

python test.py -h -u root --help --file=file.py file2.py
## 输出结果
opts输出结果为 [('-h', ''), ('-u', 'root'), ('--help', ''), ('--file', 'file.py')]
args输出结果为 ['file2.py']

optparse模块

optparse模块主要用来为脚本传递命令参数,采用预先定义好的选项来解析命令行参数,自动生成帮助信息,不需要sys.argv

先简单写个例子

import optparseusage="python %prog -u/--user <target user> -p/--password <target password>"
parser=optparse.OptionParser(usage) ## 写入上面定义的帮助信息
parser.add_option('-u', '--user',dest='User',type='string',help='target user', default='root')
parser.add_option('-p','--password',dest='Pwd',type='string',help='target password')
options, args=parser.parse_args()
print('options为', options)
print("用户名为", options.User)
print("密码为", options.Pwd)
print('args为', args)

add_option参数:

  • 可以设置多个选项字符串,比如上面的 ‘-u’, ‘–user’ 这两个,用的时候任选其一
  • dest用于定义选项值存放的位置,作为后面的第一个字典(options)的键,值为命令输入的参数
  • type用于检测命令行输入参数的数据类型是否符合要求,有 string(字符串)、int(整数)、float(浮点数)等类型
  • help用于定义帮助信息
  • default设置默认值
    在这里插入图片描述
    帮助信息里面的选项字符串都在一个组中,我们可以创建不同的组用来给选项字符串分类
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:711312441
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import optparseusage="python %prog -u/--user <target user> -p/--password <target password>"
parser=optparse.OptionParser(usage) ## 写入上面定义的帮助信息
parser.add_option('-u', '--user',dest='User',type='string',help='target user', default='root')
parser.add_option('-p','--password',dest='Pwd',type='string',help='target password')
group = optparse.OptionGroup(parser, 'Debug Options') ## 创建group分组
parser.add_option_group(group)  ## 把创建的组添加到parser中
group.add_option('-d', '--debug', action='store_true', help='Print debug information')
options, args=parser.parse_args()

action有三种类型:

  • action=‘store’ 默认类型,可以忽略不写。用户必须给出一个明确的参数值,该类型定义了将实际参数值保存到dest指定变量中
  • action=‘store_true’ 用户不需给出参数值,该类型定义了将布尔值true保存到dest指定的变量中(和上面getopt中不加 ‘:’ 、‘=’)
  • action=‘store_false’ 用户不需给出参数值,该类型定义了将布尔值false保存到dest指定的变量中

在这里插入图片描述

argparse模块

optparse模块的升级版,optparse被Python2.7和Python3.2弃用,所有有理由相信未来是属于argparse模块的

编辑帮助信息

import argparseparser = argparse.ArgumentParser(description='帮助描述信息', prog='程序显示名称', usage='顶部显示信息,会覆盖prog', epilog='底部显示信息')  ## 括号里面可以什么都不写,会走默认
parser.parse_args()    ## 命令行参数解析后存放的位置

还有一些不常用的参数:

  • add_help = False 禁止显示帮助界面,只接收参数
  • argument_default=argparse.SUPPRESS 限制只能从命令行传递参数,程序中指定无效
  • allow_abbrev=False 例如–fooo,输入–foo,则不可以识别参数,默认可以
  • conflict_handler=‘resolve’ 若参数重名,则不报错
    在这里插入图片描述
    添加命令行参数
import argparseparser = argparse.ArgumentParser()
parser.add_argument('-u', '--user', dest='User', type=str,default='root', help='target User')
parser.add_argument('-s', '--sex', dest='Sex', type=str, choices=['男', '女'], default='男', help='target Sex')
parser.add_argument('-n', '--number', dest='Num', nargs=2, required=True,type=int, help='target Two Numbers')
print(parser.parse_args())  ## 字典的方式接收参数

参数大多数和上面的optparse相同,不同的有:

  • choices:设置参数的范围,如果choice中的类型不是字符串,要指定type
  • nargs:设置参数接受的个数:
    ?:表示可有可无
    +:表示至少一个
    * :表示任意个
    数字表示必须是指定数目个
  • required:表示该参数是否可以不写,默认为 False

http://chatgpt.dhexx.cn/article/sxROENRa.shtml

相关文章

java命令行参数详解

java 命令参数详解_赶路人儿的博客-CSDN博客_java命令行参数java命令用于启动 java 应用&#xff1a;它首先会启动 java 运行时环境&#xff08;JRE&#xff09;&#xff0c;然后加载指定的类&#xff0c;调用类的main()方法。main()方法必须定义为public和static的&#xff0c…

浏览器命令行参数

浏览器命令行参数 一、Google浏览器 1.命令行参数 --google-url ”" 地址栏打开网址&#xff08;官方并无此命令&#xff09; --app”" 无地址栏打开网址 --allow-running-insecure-content Https协议页面允许请求http资源加载 --disable-web-security 禁用同源安…

九、命令行参数

对应的视屏链接&#xff1a;鲍松山的个人空间_哔哩哔哩_bilibili 目录 1、命令行参数概述 2、命令行参数使用 3、命令行参数应用----文件拷贝 1、命令行参数概述 平时写主函数为: int main() {return 0; } 事实上main函数是可以带参数的&#xff0c;我们把main函数的参数称为…

命令行参数与解析

命令行参数 通常&#xff0c;对于大型项目程序而言&#xff0c;执行程序的一个必要的步骤是正确处理命令行参数&#xff0c;这些命令行参数是提供给包含某种参数化信息的程序或脚本的参数。例如&#xff0c;在计算机视觉项目中&#xff0c;图像和不同类型的文件通常作为命令行…

Java垃圾回收—— 垃圾收集器

概述 Stop The World枚举GC Roots安全点安全区域 垃圾收集器 吞吐量GC的名词并行和并发Serial 收集器单线程垃圾收集新老ParNew 收集器Serial 升级版新Parallel 收集器吞吐量优先新老CMS 收集器停顿时间优先老G1收集器垃圾区域Region优先整个堆 垃圾收集器组合 概述 在我们上…

垃圾回收专题

一.两种回收策略 引用计数法 给对象添加一个引用计数器,每当有一个地方引用它,计数器就加1;当引用失效,计数器就减1;任何时候计数器为0的对象就是可被回收的对象. 该方法实现简单,效率高,但是目前主流的虚拟机中并没有采用该策略管理内存,最主要的原因是它很难解决对象直接相互…

26.垃圾回收器

垃圾回收器 垃圾收集器没有JVM规范中明确定义,不同厂商不同版本的JVM具体实现 JDK每次迭代的时候都会对GC进行优化 java不同版本新特性 语法层面: Lambda表达式 switch 自动装拆箱 enumAPI层面: Stream LocalDate Optional String Collectors底层优化: JVM优化 GC优化 元空间…

Java垃圾搜集器

Java垃圾收集器 概述 说起垃圾收集&#xff08;Garbage Collection&#xff0c;GC&#xff09;&#xff0c;大部分人都把这项技术当做Java语言的伴生产物。事实上&#xff0c;GC的历史远远比Java久远&#xff0c;1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技…

2021-04-17垃圾回收器

文章目录 七种典型的垃圾回收器经典收集器与垃圾分代之间的关系如何查看默认的垃圾回收器Serial回收器ParNew回收器Parallel Scavenge回收器CMS回收器G1回收器总结ZGC垃圾收集器的组合关系 七种典型的垃圾回收器 串行回收器&#xff1a;Serial、Serial Old 并行回收器&#xf…

常见的垃圾回收器

一、参考文章 https://www.cnblogs.com/datiangou/p/10245874.html https://www.cnblogs.com/jason1990/archive/2019/10/24/11732261.html 二、常用垃圾回收器 1. JDK诞生 Serial追随 提高效率&#xff0c;诞生了PS&#xff0c;为了配合CMS&#xff0c;诞生了PN&#xff0c…

Hack The Box——Luanne

目录 简介 信息收集 漏洞发现 Lua代码注入 漏洞利用 权限提升 用户r.michaels的Shell 总结 简介 靶机偏CTF类型&#xff0c;评分才2.3&#xff0c;评分这么低是有原因的。总体思路是通过lua代码注入获得WebShell&#xff0c;然后利用CVE-2010-2320读取普通用户ssh私钥…

I Box

Box 链接&#xff1a;https://ac.nowcoder.com/acm/contest/7854/I 来源&#xff1a;牛客网 Bella is working in a factory that produces boxes. All boxes are in a shape of rectangular parallelepipeds. A net of the corresponding parallelepiped is cut out of a …

常用的垃圾回收器

1、常见的垃圾回收器介绍&#xff1a; 如果说收集算法是内存回收的⽅法论&#xff0c;那么垃圾收集器就是内存回收的具体实现。现在为⽌还没有最好的垃圾收集器出现&#xff0c;更加没有万能的垃圾收集器&#xff0c;我们能做的就是根据具体应⽤场景选择适合⾃⼰的垃圾收集器。…

Java 捡垃圾利器

文章目录 垃圾收集器Serial优点使用场景 ParNew使用场景配合使用CMSG1 Parallel Scavenge使用场景参数 Serial OldParallel OldCMS流程优点缺点 G1概述主要特征内存分布回收定位问题与解决方案与 CMS 小结拓展阅读参考资料 垃圾收集器 收集算法是内存回收的方法论&#xff0c;…

垃圾回收站

【冒泡排序】c实现冒泡排序代码 【冒泡排序】c实现冒泡排序代码 【冒泡排序】c实现冒泡排序代码固态激光雷达 转载自 yangchuang93 版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 冒泡排序的基…

labweek8

实验报告 实验内容 进程间通信—消息机制。 (1) 编译运行课件 Lecture 09 例程代码&#xff1a;Algorithms 9-1 ~ 9-2. (2) 修改代码&#xff0c;观察在 msgsnd 和 msgrcv 并发执行情况下消息队列的变化情况。 (3) 仿照 alg.8-4~8-6&#xff0c;编制基于 POSIX API 的进程间…

常见垃圾回收器

CMS和G1是最重要的 新生代一般采用标记复制&#xff0c;老年代一般采用标记整理算法 Serial&#xff1a;垃圾回收线程只有一个&#xff0c;而且垃圾回收线程工作的时候其他用户线程要停下来 Parnew&#xff1a;Serial的多线程版本&#xff0c;有多个垃圾回收线程&#xff0c;垃…

垃圾回收(一)

文章目录 1. 确定哪些对象还“存活”&#xff0c;哪些已经“死去”1.1 引用计数算法1.2 可达性分析算法1.3 引用 2.垃圾回收算法2.1 分代收集理论跨代引用 2.2 标记-清除算法2.3 标记-复制法2.4 标记-整理算法 垃圾收集需要完成的三件事&#xff1a; 哪些内存需要回收&#xff…

python 垃圾箱-垃圾回收

前戏 解释器在执行到定义变量的语法时&#xff0c;会申请内存空间来存放变量的值&#xff0c;而内存的容量是有限的&#xff0c;这就涉及到变量值所占用内存空间的回收问题&#xff0c;当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉&#xff0c;那什么样的变量值…

纪念第一届cccc天梯赛

来一篇迟到的文章 先来爆一下战绩吧&#xff1a;SDUT&#xff0c;学校排名全国第六获金&#xff0c;山东省冠军。学校一共三支队伍&#xff0c;学长们一支最强的队获一等奖&#xff0c;剩下的两支二等奖。 战绩总体来看还不错吧&#xff0c;离不开我们每一个队员和老师们的努…