Python程序读取命令行参数(sys和getopt)

2023-10-29 08:48

本文主要是介绍Python程序读取命令行参数(sys和getopt),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、一层难度
    • 1.sys 模块
    • 2.例子
      • (1)基本特性
      • (2)都是str类型
      • (3)xxx.py及其之后的才是
      • (4)空格和转移字符
  • 二、二层难度
    • 1.getopt模块
      • (1)思想
      • (2)函数
    • 2.例子
      • (1)简单
      • (2)提取元组
  • 三、帮助文档格式


一、一层难度

这里我们只需要获取控制台输入的字符串是啥,直接抄过来。

1.sys 模块

import sys
  • 访问到所有的命令行参数:
    • python xxx.pyxxx.py及其之后的才是,之前的不是。
    • 要编译的.py文件就是第一个参数
  • 它的返回值sys.argv列表(list)类型
    • 参数个数: len(sys.argv)
    • 访问列表元素:sys.argv[i]
      • 从0开始,第一个sys.argv[0]就是.py文件。
      • 都是字符串类型。
  • 参数
    • 以空格分离
    • 可以被''包含着输入空格
    • 转移字符\传入后多带一个\

2.例子

(1)基本特性

import sysprint(sys.argv)
print(type(sys.argv))
print(sys.argv[0])

在这里插入图片描述

(2)都是str类型

import sysprint(sys.argv)
print(sys.argv[1])
print(type(sys.argv[1]))

在这里插入图片描述

(3)xxx.py及其之后的才是

import sysprint(sys.argv)

在这里插入图片描述

  • 第一个-u不是,因为它是传给编译器的参数,只有xxx.py及其之后的才是
  • 第二个-u是,可以看到被读取到了。

(4)空格和转移字符

import sysprint(sys.argv)

在这里插入图片描述

  • 以空格分离
  • 可以被''包含着输入空格
  • 转移字符\传入后多带一个\

二、二层难度

在sys模块的基础上,我们不仅要获取命令行参数,还要将每个参数和对应的变量关联起来。

比如:输入用户名username和密码password

  • 用sys是python xxx.py 3 4,我们还得自己还得保证3对应用户名username和4对应密码password。
  • 而用getopt是python xxx.py -u 3 -p 4python xxx.py -p 4 -u 3,这样就不怕对应不上了。

1.getopt模块

# 需要用sys.argv[1:]参数
import sys
import getopt

(1)思想

getopt怎么解析参数的?

  • 我们知道-u3对应、-p4对应,这种形式很像键值对,那么我们就可以用一个元组将其分别存储起来,然后将这些元组整合在一起成为一个列表
  • 同时,有的命令参数不需要对应的值,比如常见的-h表示需要帮助。我们也用元组储存,对应的值为空就行
  • 解析键值对的时候,是顺序解析的,碰到解析错误时后面就不解析全归入错误的第二个返回值args中了。比如要-h -u 3 -p 4,却输入错误的-h 3 -u -p 4
    在这里插入图片描述

(2)函数

原型:

getopt.getopt(args, options[, long_options])

例子:

opts, args = getopt.getopt(sys.argv[1:], "hu:p:",["help", "username=", "password="])
# 三种参数,help(h),username(u),password(p)。第一个不需要值,另外两个需要值
  • args:表示要解析的命令行参数,为sys.argv[1:]
    因为要解析的是键值对的参数,而sys.argv[0]表示文件xxx.py,不对应键值对。
    注意:当传入文件名(即sys.argv)是会解析错误的,你会发现后面的参数匹配不上。
  • options:-u这种带个-的形式,表示短格式分析串。
    • 用字符串""
    • 一个字母即表示一种参数(键值对的键)
    • 字母后跟:表示需要值,不跟表示不需要值。
  • long_options:--usename这种带个--的形式,表示长格式分析串。
    • 用列表[]
    • 一个单词即表示一种参数(键值对的键)
    • 单词后跟=表示需要值,不跟表示不需要值。
  • 返回值:
    • 第一个返回的是元组的列表,表示成功对应的参数
    • 第二个返回的是列表,表示对应失败无法解析的参数

2.例子

(1)简单

# 需要用sys.argv[1:]参数
import sys
import getoptprint(sys.argv)try:# 三种参数,help(h),username(u),password(p)。第一个不需要值,另外两个需要值opts, args = getopt.getopt(sys.argv[1:], "hu:p:",["help", "username=", "password="])# 元组的列表,表示成功对应的参数print('[opts]', opts)# 列表,表示对应失败无法解析的参数print('[args]', args)
# 报错是getopt.GetoptError
except getopt.GetoptError:print('[getopt.GetoptError]')sys.exit()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
输入的时候:

  • 短:-u 3-u3
  • 长:--username 3--username=3

(2)提取元组

就是处理每个元组

import sys
import getoptprint(sys.argv)try:opts, args = getopt.getopt(sys.argv[1:], "hu:p:",["help", "username=", "password="])username = ""password = ""# 就是处理每个元组for k, v in opts:if k in ("-h", "--help"):print('[-h --help]')elif k in ("-u", "--username"):username = vprint('[-u --username]', username)elif k in ("-p", "--password"):password = vprint('[-p --password]', password)print('[username]', username)print('[password]', password)
except getopt.GetoptError:print('[getopt.GetoptError]')sys.exit()

在这里插入图片描述

三、帮助文档格式

Code Style: how to write command parameters help document

这篇关于Python程序读取命令行参数(sys和getopt)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/299553

相关文章

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

Python下载Pandas包的步骤

《Python下载Pandas包的步骤》:本文主要介绍Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大... 目录安装步骤1、首先找到我们安装python的目录2、使用命令行到Python安装目录下3、我们回到Py