sys是Python标准库中非常重要的一个模块,主要用于访问Python解释器本身以及解释器运行环境相关的信息和功能

1. 导入sys

sys属于Python标准库,不需要安装,只需要导入:

1
import sys

2. sys.argv:获取命令行参数

sys.argv是一个列表,保存启动Python程序时传入的命令行参数

创建test.py:

1
2
3
import sys

print(sys.argv)

执行:

1
python test.py hello 123

结果:

1
['test.py', 'hello', '123']

所有命令行参数默认都是字符串,所以如果需要进行数值计算则需要手动转换类型

3. sys.path:模块搜索路径

sys.path是一个列表,表示Python执行import时,会去哪些目录寻找模块

1
2
3
4
5
6
7
sys.path
[
'/home/user/project',
'/usr/lib/python3.12',
'/usr/local/lib/python3.12/site-packages',
...
]

可以通过列表自带的insert()函数将目标目录放入搜索列表:

1
2
3
import sys

sys.path.insert(0, "/home/user/my_project")

流程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
原来:

sys.path

├── /usr/lib/python3.12
├── site-packages
└── ...

加入:

sys.path.insert(0, "/home/user/my_project")



sys.path

├── /home/user/my_project
├── /usr/lib/python3.12
├── site-packages
└── ...

常与pathlib库一同使用,可将项目根目录放入模块搜索路径:

1
2
3
4
5
6
7
from pathlib import Path
import sys

ROOT = Path(__file__).resolve().parents[1]

if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))

5. sys.modules:已经导入的模块

sys.modules是一个字典:

1
2
3
4
sys.modules
{
模块名: 模块对象
}

例子:

1
2
3
4
import sys
import math

print(sys.modules["math"])

输出:

1
<module 'math' (built-in)>

如果出现多次import math,则会因为sys.modules中已经存在import math所以不会再次初始化

6. sys.exit():退出程序

函数签名可以简单理解为:

1
sys.exit(status=None)

例子:

1
2
3
4
5
6
7
import sys

print("开始")

sys.exit()

print("结束")

输出:

1
开始

也可以:

1
sys.exit(0)

通常情况下,0表示正常退出,非0表示异常退出

例如:

1
2
if config_error:
sys.exit(1)

sys.exit()本质上并不是强制杀死Python进程,而是:

1
raise SystemExit

因此:

1
2
3
4
try:
sys.exit()
finally:
print("清理资源")

则finally中的内容仍会进行

7. 目前只写了几个常用的,别的什么时候用到什么时候补充