先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
正文
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:o:": 短格式分析串, h 后面没有冒号, 表示后面不带参数; i 和 o 后面带有冒号, 表示后面带参数
# ["help", "input\_file=", "output\_file="]: 长格式分析串列表, help后面没有等号, 表示后面不带参数; input\_file和output\_file后面带冒号, 表示后面带参数
# 返回值包括 `opts` 和 `args`, opts 是以元组为元素的列表, 每个元组的形式为: (选项, 附加参数),如: ('-i', 'test.png');
# args是个列表,其中的元素是那些不含'-'或'--'的参数
opts, args = getopt.getopt(argv[1:], "hi:o:", ["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
在参数列表中没有找到所传递参数,或选项的需要的参数为空时会触发该异常。异常的参数是一个字符串,表示错误的原因。属性 msg
和 opt
为相关选项的错误信息。
在上述代码中添加异常处理,检查此错误信息:
# ...
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
,如下所示:
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
不带参数运行此脚本不会向 stdout
显示任何内容。但是,如果使用 --help
或 -h
选项,将得到脚本的使用信息提示:
usage: scripy_3.py [-h]
optional arguments:
-h, --help show this help message and exit
指定其他参数会导致错误,例如使用如下命令:
scripy_3.py -i
则会报导致错误:
usage: scripy_3.py [-h]
argparse_minimal.py: error: unrecognized arguments: -i
由于未定义参数,因此不允许其他参数,接下来就添加一个参数,编写 script_4.py
脚本:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("first\_argument", help="this is the string text in connection with first\_argument")
args = parser.parse_args()
print(args.first_argument)
这里添加了 add_argument()
方法。此方法用于指定程序将接受哪些命令行选项,此处添加了 first_argument
参数。此外, argparse
模块存储所有参数,将其名称与每个添加参数的名称相匹配——在此处为 first_argument 。为了获得参数值,需要使用 args.first_argument
。
如果此脚本以下示方法执行,则输出为 10:
python scripy_4.py 10
但如果脚本在没有参数的情况下执行,则将输出以下信息:
usage: scripy_4.py [-h] first_argument
scripy_4.py: error: the following arguments are required: first_argument
写在最后
在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。
需要完整版PDF学习资源私我
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
。**
需要完整版PDF学习资源私我
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-na7Xd14i-1713393795620)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!