Python 命令行参数详解,View的这些基础知识你必须要知道

sys.argv

接下来,让我们看看 sys.argv 是如何工作的,首先编写 scripy_1.py 脚本:

import sys

print(“正在运行的脚本名称: ‘{}’”.format(sys.argv[0]))

print(“脚本的参数数量: ‘{}’”.format(len(sys.argv)))

print(“脚本的参数: ‘{}’”.format(str(sys.argv)))

如果我们不使用任何参数执行这个脚本:

python script_1.py

将会看到如下信息:

正在运行的脚本名称: ‘script_1.py’

脚本的参数数量: ‘1’

脚本的参数: ‘[‘script_1.py’]’

如果我们使用多个参数执行此脚本:

python script_1.py OpenCV -i test.png

将得到以下信息:

正在运行的脚本名称: ‘script_1.py’

脚本的参数数量: ‘4’

脚本的参数: ‘[‘script_1.py’, ‘OpenCV’, ‘-i’, ‘test.png’]’

如上所示,列表的第一个元素 script_1.py (sys.argv[0]) 是脚本名称。列表的第二个元素 (sys.argv[1]) OpenCV 是脚本的第一个参数。但同时也可以看到,sys.argv 将命令行选项 -i 也识别为参数,这样并不能方便的满足我们的需求,因此引入 getopt 模块来识别命令行选项。

2. getopt


getopt 模块是专门处理命令行参数的模块,用于获取命令行选项和参数。命令行选项使得程序的参数更加灵活,其支持短选项模式(-)和长选项模式(–)。

该模块提供了两个方法及一个异常处理来解析命令行参数。

2.1 getopt.getopt 方法

getopt.getopt 方法用于解析命令行参数列表,其语法格式如下:

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

方法参数说明如下表所示:

| 参数 | 说明 |

| — | — |

| args | 要解析的命令行参数列表,一般是sys.argv[1:],需要过滤掉脚本名(sys.argv[0]) |

| options | 以字符串的格式定义,options 后的冒号 “:” 表示如果设置该选项,必须有附加的参数,否则就不附加参数 |

| long_options | 以列表的格式定义,long_options 后的等号 “=” 表示该选项必须有附加的参数,不带冒号表示该选项不附加参数 |

该方法返回值由两个元素组成: 第一个是 (option, value) 元组的列表。 第二个是参数列表,包含那些没有 - 或 – 的参数。

下面编写 script_2.py 脚本进行演示:

import sys

import getopt

def main(argv):

input_file = “”

output_file = “”

“hi⭕️”: 短格式分析串, h 后面没有冒号, 表示后面不带参数; i 和 o 后面带有冒号, 表示后面带参数

[“help”, “input_file=”, “output_file=”]: 长格式分析串列表, help后面没有等号, 表示后面不带参数; input_file和output_file后面带冒号, 表示后面带参数

返回值包括 optsargs, opts 是以元组为元素的列表, 每个元组的形式为: (选项, 附加参数),如: (‘-i’, ‘test.png’);

args是个列表,其中的元素是那些不含’-‘或’–'的参数

opts, args = getopt.getopt(argv[1:], “hi⭕️”, [“help”, “input_file=”, “output_file=”])

for opt, arg in opts:

if opt in (“-h”, “–help”):

print(‘script_2.py -i <input_file> -o <output_file>’)

print(‘or: test_arg.py --input_file=<input_file> --output_file=<output_file>’)

sys.exit()

elif opt in (“-i”, “–input_file”):

input_file = arg

elif opt in (“-o”, “–output_file”):

output_file = arg

print(‘输入文件为:’, input_file)

print(‘输出文件为:’, output_file)

打印不含’-‘或’–'的参数

for i in range(0, len(args)):

print(‘不含’-‘或’–‘的参数 %s 为:%s’ % (i + 1, args[i]))

if name == “main”:

main(sys.argv)

使用带有命令行选项的命令执行此脚本,以下两种方式是等价的:

方式1

python scripy_1.py -i test.png -o output.png OpenCV

方式2

python scripy_1.py --input_file test.png --output_file output.png OpenCV

输出得到以下信息:

输入文件为: test.png

输出文件为: output.png

不含’-‘或’–'的参数 1 为:OpenCV

2.2 Exception getopt.GetoptError

在参数列表中没有找到所传递参数,或选项的需要的参数为空时会触发该异常。异常的参数是一个字符串,表示错误的原因。属性 msgopt 为相关选项的错误信息。

在上述代码中添加异常处理,检查此错误信息:

def main(argv):

input_file = “”

output_file = “”

try:

opts, args = getopt.getopt(argv[1:], “hi:o”, [“help”, “input_file=”, “output_file=”])

except getopt.GetoptError as e:

print(e.msg)

print(e.opt)

sys.exit(2)

使用错误的格式选项传递参数执行脚本:

python scripy_1.py -f

输出以下错误信息:

option -f not recognized

f

3. argparse


当程序中使用采用复杂参数或多个文件名时,推荐使用 Python 的 argparse 库,它以系统的方式处理命令行参数,从而可以编写用户友好的命令行程序。Python 标准库 argparse 同样也是用于解析命令行参数的模块。首先,由程序确定所需的参数,然后, argparse 将这些参数解析为 sys.argv。此外,argparse 会生成帮助和使用信息提示,并在提供无效参数时发出错误。

为了介绍此模块,编写 script_3.py,如下所示:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

https://img-blog.csdnimg.cn/img_convert/8c4513c1a906b72cbf93031e6781512b.png)

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

  • 20
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值