Python常用标准库及第三方库2-sys模块

网站建设4年前发布
66 0 0

前面介绍的os模块主要面向操作系统,而本篇的sys模块则主要针对的是Python解释器。,sys模块是Python自带的模块,它是与Python解释器交互的一个接口。sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分。,通过dir()方法可以查看sys模块中带有哪些方法:,20230307002426f1676af13b7d7c163bd7131afeb2525b69d506930,sys.argv作用是实现从程序外部向程序传递参数,它能够获取命令行参数列表。argv列表包含了所有传递给脚本的参数:,在Python命令行执行此脚本文件(未带任何参数时),获取到的第一个元素是脚本本身。打印结果为:,20230307001945b9db983516c684dd60c92635e46a41a6586442806,在Python命令行执行此脚本文件(带参数时),获取到的第一个元素是脚本本身,其余的是传递来的参数。打印结果为:,2023030700194553d72559978ea2339360161c004a8f46920ad6900,sys.exit(n):,一般情况下,程序执行到末尾、解释器就会自动退出。此时代码里并没有调用sys.exit(0),但实际Python解释器在运行时调用sys.exit(0),运行后PyCharm编辑器会自动提示“Process finished with exit code 0”,如下:,20230307001946248923e32ad32319f53932a5fba87f1b3342c8373,而当代码里调用了sys.exit(888),即传入一个非0的整数,此时运行后PyCharm编辑器会提示“Process finished with exit code 888”,如下:,20230307002426117490661de9230bb22609b7b2fdb4f001dd5d929,而当在代码里调用了sys.exit(n)后,表示程序会退出,不管n是否等于0 ,即不管是正常退出还是异常退出,其后的语句都不会执行,也就是不会执行"print("Python sys.exit() 用法示例")"这句。从下面的图中也能看出,sys.exit(888)后的语句在PyCharm编辑器中已经泛黄提示(正常语法规范的话是不会泛黄提示的),并且运行结果也确实没有执行sys.exit(888)后的语句:,20230307001947f17961f71c59592305d82776b4b50bb1a13601160,一般情况下,执行到主程序末尾,解释器就会自动退出。上面的例子已经告诉我们,如果想要中途退出,先调用sys.exit(),再调用其他语句是行不通的,编辑器会警告提示。,如果想要自由地控制程序是否在中途退出,可以使用"sys.exit(n)+捕获异常"的方式。其中,n可以是一个整数参数,也可以是字符串参数,当n为非0的值时,就会抛出SystemExit异常,可以在主程序中对其进行捕获:,① 程序中途退出示例,执行结果如下:,20230307001948370a7c7170f6185b7a132869906e89356253fc693,执行过程分析:,② 程序中途不退出示例,上个示例的执行结果可以看到在exit_function函数中调用sys.exit(0),此时程序就会退出,不会再执行print("end sys"),而当在exit_function函数中注释掉sys.exit(0),则会继续执行最后的代码print("end sys"),即:程序中途不退出,如下所示:,202303070024279159b139270d93614d62553ac354bff22eb472219,Windows下运行:,20230307001949f3177de866ba9cc884c134fca7288234c78dc6646,Linux下运行:,2023030700195121456746049ea6ad89e7656ed6d91b5e039d9f679,除了sys.platform外,通过platform.system()也可以获取到当前系统平台:,Windows下运行:,20230307002427c33249b98d56a18fdef8749407610f440e20de891,Linux下运行:,20230307001952556c0c01123f7cba95b62311e0d551f996f3a5420,我们都知道Python是跨平台语言,只要操作系统安装了Python环境,那么同一份Python代码就可以既运行在Linux上,也可以运行在Windows上,亦或是Mac上。,而使用sys.platform或platform.system()获取到当前系统平台名称后,我们就可以针对性地作出不同操作,例如:,sys.path是Python的搜索模块的路径集,供Python从中查找模块,返回一个list。,20230307001952641036e31736ab2dcbd056e61b524f7d0d9085466,如果是在IDE中执行Python程序,编译器会自动把当前项目的根目录加入到包查找路径中,可以理解为添加到环境变量下,所以直接执行是没有问题的。但是在cmd或是Terminal控制台中直接使用Python相关命令来执行程序,则不会自动将当前项目加入到PYTHONPATH环境变量下,如果涉及到import其他文件夹下的变量就会报类似"ModuleNotFoundError: No module named 'xxxx'"这样的错误。,解决方法:通过sys.path.append()方法将当前项目的根目录添加到系统环境变量中:,在Python中, input() 等价于 sys.stdin.readline(),① 先来看看使用input()的实现效果,执行效果如下:,20230307002429270043211fdd67131d488264936b61ba89cc50621,② 再来看看使用sys.stdin.readline()的实现效果,执行效果如下:,202303070024299255212754875e54429206fb00f30a9a78781f871,在Python中, print() 等价于 sys.stdout.readline(),① 先来看看使用print()的实现效果,执行效果如下:,20230307001954344f6c2752b34f79970504b2357b6c293e0acd463,② 再来看看使用sys.stdin.write()的实现效果,执行效果如下:,20230307001954445926f824d78c9f8b5394823e7427cee18190248,所以综上所述,input()+print() 结合的代码语句即可使用sys.stdin.readline()+sys.stdin.write()代替,如下:,执行效果如下:,20230307002431c207f1954b6fad16b4f281c32d0d1e6ce4280d263,sys模块是Python自带的模块,主要用于与Python解释器交互。它自带了很多方法或属性,其中:,1.sys.argv作用是实现从程序外部向程序传递参数,它能够获取命令行参数列表。argv列表包含了所有传递给脚本的参数:,2.sys.exit(n)作用是退出程序:,sys.exit(n)经常与捕获SystemExit异常一起使用,用来控制程序是否自由地中途退出;,3.sys.platform作用是获取当前Python运行平台,类似于platform.system(),常用来针对性地对不同操作系统作出不同的操作逻辑;,4.sys.path是Python的搜索模块的路径集,通过sys.path.append()方法将当前项目的根目录添加到系统环境变量中,可以用来解决找不到模块的报错情况;,5.在Python中, input() 等价于 sys.stdin.readline(),print() 等价于 sys.stdout.readline()。

© 版权声明

相关文章