[TOC]

sys模块介绍

sys全称system系统,该模块提供了系统相关的参数和函数,这些变量和方法可供Python解释器交互,用于操控运行时的环境。

什么是Python解释器

python是一种语言,而这种语言是对程序员来说的,计算机系统并不能理解,所以有了python解释器。

python解释器是一个软件,用于解析和执行Python程序。

Python解释器有多种实现:

  • CPython是Python的官方解释器,它是基于C语言开发的,将Python代码解释成C语言的中间代码,然后再通过编译器将C代码转换为机器码执行。

  • IPython 是基于 CPython 之上的一个交互式解释器,旨在提供更快的执行速度。它通过即时编译(JIT)技术将Python代码直接转换为机器码,而不需要中间过程。

  • PyPy :PyPy 解释器的目标是执行速度,它采用 JIT 技术,对 Python 代码进行动态编译,所以可以显著提高 Python 代码的执行速度。

  • Jython:运行在 Java 平台上的 Python 解释器,可以直接把 Python 代码编译成 Java 字节码执行。

具体功能和方法介绍

参考文档

python官中文档

python之sys模块详解

Python 常用基础模块(四):sys模块

基础方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sys.version	#还有sys.version_info
#一个字符串,包含Python解释器版本号加编译版本号以及所用编译器等额外信息。
#'3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)]'

sys.platform #sys.getwindowsversion获取windows版本
#一个字符串,获取当前运行平台
#'win32'
sys.executable
#字符串,当前Python解释器的可执行文件路径。在需要时执行与Python解释器相关的操作,例如调用另一个Python脚本、创建子进程等。
#'D:\\python\\python.exe'

sys.copyright #版权相关的东西
sys.api_version #解释器的C的API版本
sys.executable #Python解释程序路径
sys.builtin_module_names #Python解释器导入的模块列表

sys.argv

一个列表,包含了被传递给python脚本的命令行参数。

  • argv[0]:程序本身的路径
  • argv[1]:程序的第一个参数
1
2
3
>>>python helloworld.py -b
#sys.argv打印结果:['E:/pythoncode/helloworld.py', '-b']
#sys.arg[0]打印结果:E:/pythoncode/helloworld.py

sys.exit()

此方法用于退出python解释器,即退出运行。

1
2
3
4
5
6
#正常退出程序
sys.exit(0)
#非正常,参数不为0时,如下。
sys.exit(1)

#作用:控制程序中途退出

image-20230721004033333

sys.modules

一个字典,获取本机所有已安装的模块及所在模块文件

1
2
3
4
5
sys.modules['os']
#获取os模块列表

sys.modules.keys()
#可遍历打印所有模块

sys.path

一个列表,包含python相关的路径,这些是模块的搜索路径。第一项path[0]为该.py脚本所在目录。下面图片中是在控制台中,所以第一项为空字符串。

image-20230721204248378

作用:有时候程序运行的环境不同,模块的路径会出现问题,可以通过sys.path.append(root_path)添加到里面。

sys.stdin&sys.stdout&sys.stderr

文件对象,标准输入,标准输出,错误输出

  • stdin 用于所有交互式输入(包括对 input() 的调用);
  • stdout 用于 print()expression 语句的输出,以及用于 input() 的提示符;
  • 解释器自身的提示符和它的错误消息都发往 stderr
1
2
3
4
5
6
7
8
sys.stdin.readline()	#等价于input()
#在交互式终端正常使用没问题,但在集成开发环境,可能无法正常工作

sys.stdout.write() #等价于print()
#print()函数实际上是通过sys.stdout实现的,由于print()函数在builtins.py中实现为一个内建函数,其具体实现通常由编译器或解释器负责。因此,我们不能直接查看print()函数的源代码。

sys.stderr.write() #可以在错误流中输入信息
#用于将错误信息输出到控制台或其他错误日志文件中。默认情况下,sys.stderr连接到控制台。

sys.getdefaultencoding()

1
2
3
4
5
6
7
8
9
sys.getdefaultencoding()
#字符串,返回当前默认字符串编码的名称
#'utf-8'

sys.setdefaultencoding('')
#设置当前默认字符编码

sys.getfilesystemencoding()
#字符串,返回当前系统中文件系统编码的名称。

文件系统编码是指用于在操作系统文件系统中表示和存储文件名和路径的字符编码。不同的操作系统和文件系统可能使用不同的字符编码来处理文件名和路径。

sys.exc_info()

元组,包含当前异常类型、异常对象和跟踪栈信息:

  • 异常类型:表示引发异常的类型。
  • 异常对象:表示当前异常的实例对象。
  • 跟踪栈信息:表示导致异常的函数调用栈信息

举例,10/0的错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys

try:
# Some code that may raise an exception
result = 10 / 0
except:
# Get the exception information using sys.exc_info()
exc_type, exc_value, exc_traceback = sys.exc_info()

# Print the exception information
print("Exception type:", exc_type)
print("Exception value:", exc_value)
print("Traceback:", exc_traceback)

'''输出
Exception type: <class 'ZeroDivisionError'>
Exception value: division by zero
Traceback: <traceback object at 0x7f53a472d388>
'''

image-20230722010328387

help(sys)

该文章第三节有详细翻译:python之sys模块详解