Python 命令行参数详解

做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。

别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。

我先来介绍一下这些东西怎么用,文末抱走。


(1)Python所有方向的学习路线(新版)

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

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

(4)200多本电子书

这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。

基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。

(5)Python知识点汇总

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。

在这里插入图片描述

(6)其他资料

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。

在这里插入图片描述

这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!


将会看到如下信息:



正在运行的脚本名称: ‘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


在参数列表中没有找到所传递参数,或选项的需要的参数为空时会触发该异常。异常的参数是一个字符串,表示错误的原因。属性 `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](https://bbs.csdn.net/topics/618317507) 同样也是用于解析命令行参数的模块。首先,由程序确定所需的参数,然后, `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


最后,如果我们使用 `-h` 选项执行脚本,输出将如下所示:



usage: scripy_4.py [-h] first_argument

positional arguments:
first_argument this is the string text in connection with first_argument

optional arguments:
-h, --help show this help message and exit


默认情况下,argparse 将提供的选项视为字符串。因此,如果参数不是字符串,则应使用 `type` 选项。使用 `script_5.py` 脚本,其中添加了两个参数,这两个参数是 `int` 类型:



import argparse
parser = argparse.ArgumentParser()
parser.add_argument(“first_number”, help=“first number to be added”, type=int)
parser.add_argument(“second_number”, help=“second number to be added”, type=int)
args = parser.parse_args()
print(“args: ‘{}’”.format(args))
print(“the sum is: ‘{}’”.format(args.first_number + args.second_number))
args_dict = vars(parser.parse_args())
print(“args_dict dictionary: ‘{}’”.format(args_dict))
print(“first argument from the dictionary: ‘{}’”.format(args_dict[“first_number”]))


在前面的示例中,通过调用 `vars()` 函数将参数存储在字典中:



args_dict = vars(parser.parse_args())
print(“args_dict dictionary: ‘{}’”.format(args_dict))
print(“first argument from the dictionary: ‘{}’”.format(args_dict[“first_number”]))



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

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

![img](https://img-blog.csdnimg.cn/1d40facda2b84990b8e1743f5487d455.png)  
![img](https://img-blog.csdnimg.cn/0fc11d4a31bd431dbf124f67f1749046.png)

**二、Python必备开发工具**

工具都帮大家整理好了,安装就可直接上手!![img](https://img-blog.csdnimg.cn/ff266f529c6a46c4bc28e5f895dec647.gif#pic_center)

**三、最新Python学习笔记**

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

![img](https://img-blog.csdnimg.cn/6d414e9f494742db8bcc3fa312200539.png)

**四、Python视频合集**

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

![img](https://img-blog.csdnimg.cn/a806d9b941c645858c61d161aec43789.png)

**五、实战案例**

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。![img](https://img-blog.csdnimg.cn/a353983317b14d3c8856824a0d6186c1.png)

**六、面试宝典**

![在这里插入图片描述](https://img-blog.csdnimg.cn/97c454a3e5b4439b8600b50011cc8fe4.png)

![在这里插入图片描述](https://img-blog.csdnimg.cn/111f5462e7df433b981dc2430bb9ad39.png)

###### **简历模板**![在这里插入图片描述](https://img-blog.csdnimg.cn/646863996ac44da8af500c049bb72fbd.png#pic_center)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值