目录
一、sys模块介绍
1.1 什么是 Python 解释器(说明)
当编写 Python 代码时,通常都会得到一个包含 Python 代码的以 .py
为扩展名的文件。要运行编写的代码,就需要使用 Python 解释器去执行 .py
文件。因此,Python 解释器就是用来执行 Python 代码的一种工具。常见的 Python 解释器有以下几种:
- CPython:Python 的官方解释器。当我们从 Python 官方网站下载并安装好 Python 后,就直接获得了 CPython 解释器,该解释器是使用 C 语言开发的,所以叫 CPython。我们在 CMD 命令窗口中运行 python 命令就是启动 CPython 解释器,如下图所示:
- IPython :IPython 是基于 CPython 之上的一个交互式解释器,它执行 Python 代码的功能和 CPython 是完全一样的,唯一的区别是:CPython 用
>>>
作为提示符,而 IPython 用In[ 序号]:
作为提示符。
- PyPy :PyPy 解释器的目标是执行速度,它采用 JIT 技术,对 Python 代码进行动态编译,所以可以显著提高 Python 代码的执行速度。
- Jython:运行在 Java 平台上的 Python 解释器,可以直接把 Python 代码编译成 Java 字节码执行。
- IronPython :运行在微软
.NET
平台上的 Python 解释器,可以直接把 Python 代码编译成.NET
的中间代码。
1.2 sys 模块的作用
sys 模块提供访问 Python 解释器使用或维护的属性,以及与 Python 解释器进行交互的方法。简单来讲,sys 模块负责程序与 Python 解释器的交互,并提供了一系列的属性和方法,用于操控 Python 运行时的环境。
在 Python 程序中使用 sys 模块,首先需要使用 import 导入,代码如下:
import sys
导入 sys 模块后,就可以使用该模块提供的属性和方法了。
二、常用方法及属性介绍
2.1 modules属性——将模块名称映射到已加载模块的字典
modules 属性返回一个将模块名称映射到已加载模块的字典。语法格式如下:
sys.modules # 返回值:返回一个字典
使用 modules 属性获取本机所有已安装的模块及所在模块文件,代码如下:
import sys
for key, value in sys.modules.items(): # 遍历所有模块字典
print(f'{key}:{value}') # 打印模块及所在模块文件
程序运行结果如下:
使用 modules 属性获取 os 模块的来源,代码如下:
import sys
# <module 'os' from 'd:\\developsoftware\\python37\\lib\\os.py'>
print(sys.modules["os"])
使用 modules 对象的 keys() 方法可以获取到所有导入的模块列表,代码如下:
import sys
print('模块列表:')
for i in sys.modules.keys(): # 遍历模块列表
print('' + i) # 打印模块
2.2 getdefaultencoding()方法——获取默认字符串编码名称
getdefaultencoding() 方法用于返回当前默认字符串编码的名称,语法格式如下:
sys.getdefaultencoding()
参数说明:返回值:返回类似 ascii、utf-8 或者 gbk 等的字符串,具体的值根据 site.py
模块中设置的默认编码而定。
使用 getdefaultencoding() 方法获取本地 Python 解释器使用的默认字符串编码,代码如下:
import sys
print(sys.getdefaultencoding()) # utf-8
2.3 exit()方法——退出Python
exit() 方法用于退出 Python 解释器,即退出正在运行的程序。语法格式如下:
sys.exit([arg])
参数说明:
- arg :可选参数,该参数是一个整数,表示退出状态。0 表示正常退出,非 0 表示异常终止。如果指定为一个非整数值,则将它打印到 sys.stderr,并使用退出码 1。
- 返回值:返回退出码,0 表示正常退出,1 表示异常退出。
说明:arg 参数的取值范围通常在 0~127 范围内,否则会产生不确定的结果。
正常退出程序的代码如下:
import sys
print(11)
sys.exit(0)
程序运行结果如下:
通过为 exit() 方法指定非 0 参数异常终止程序,代码如下:
import sys
print(11)
sys.exit(1)
print(22)
程序运行结果如下:
2.4 path属性——指定模块搜索路径
path 属性用于获取一个字符串列表,它指定模块的搜索路径。在程序启动时,此列表的第一项 path[0] 通常是 Python 脚本(.py 文件) 所在的目录。如果脚本目录不可用(例如,交互式调用解释器或者从标准输入读取脚本),则 path[0] 为空字符串,它指示 Python 首先搜索当前目录中的模块。语法格式如下:
sys.path
使用 path 属性获取 Python 解释器的模块搜索路径,并遍历输出,代码如下:
import sys
for i in sys.path: # 遍历所有路径列表
print(i) # 打印遍历到的路径
程序运行结果如下:
E:\Code\lesson\python-package
E:\Code\lesson
D:\DevelopSoftware\PyCharm2021.3.3\PyCharm 2021.3.3\plugins\python\helpers\pycharm_display
d:\developsoftware\python37\python37.zip
d:\developsoftware\python37\DLLs
d:\developsoftware\python37\lib
d:\developsoftware\python37
E:\Code\scrapy_study\venv
E:\Code\scrapy_study\venv\lib\site-packages
D:\DevelopSoftware\PyCharm2021.3.3\PyCharm 2021.3.3\plugins\python\helpers\pycharm_matplotlib_backend
使用 path 属性的 append() 方法向模块搜索路径中添加 ./module
,然后遍历输出最新的模块搜索路径,代码如下:
import sys
sys.path.append("./module") # 添加模块搜索路径
2.5 argv属性——程序命令行参数列表
argv 属性表示传递给 Python 脚本的命令行参数列表。argv[0] 是脚本名称(取决于操作系统是否为完整路径名)。语法格式如下:
sys.argv
通过使用 argv 属性获取 Python 解释器的命令行参数列表,并使用 argv[0] 获取 Python 脚本的完整路径,代码如下:
通过使用 os 模块的 fsencode() 方法获取命令行参数的原始字节,代码如下:
import sys
import os
for arg in sys.argv:
print(os.fsencode(arg))
程序运行结果如下:
b'E:/Code/lesson/python-package/demo5_sys.py'
注意:在 Unix 系统中,命令行参数是从 OS 传递的字节。Python 使用文件系统编码和 surrogateescape 错误处理程序对它们进行解码。
2.6 platform属性——获取系统标识符
platform 属性返回一个表示系统标识符的字符串。语法格式如下:
sys.platform
操作系统及对应的 platform 值如下表所示:
用 platform 属性判断当前系统平台为哪个平台,代码如下:
import sys
if sys.platform == 'win32':
print('当前是Windows平台')
elif sys.platform == 'linux':
print('当前是Linux平台')
elif sys.platform == 'darwin':
print('当前是Mac平台')
笔者使用的是 Windows 平台,故程序运行结果如下: