Python 模塊sys詳解
一、模塊簡介
sys 是 Python 的一個內置標準庫模塊,全名為 “System-specific parameters and functions”(系統特定參數與函數)。
它提供了與 Python 解釋器 和 操作系統交互 的接口,使開發者能夠訪問解釋器的運行環境、路徑信息、輸入輸出流、異常處理、退出控制等底層功能。
二、模塊導入
import sys
導入后即可直接使用其中的屬性和函數,如:
print(sys.version)
print(sys.platform)
sys.exit(0)
三、常用屬性與方法總覽表
| 分類 | 屬性/方法 | 說明 | 類型 / 返回值 | 示例 |
|---|---|---|---|---|
| 版本信息 | sys.version |
獲取當前 Python 的版本號(含構建信息) | str |
'3.12.1 (tags/v3.12.1:...)' |
sys.version_info |
獲取版本元組(major, minor, micro, releaselevel, serial) | tuple |
(3, 12, 1, 'final', 0) |
|
sys.hexversion |
以十六進制返回版本信息 | int |
0x30c01f0 |
|
| 解釋器信息 | sys.executable |
返回 Python 解釋器可執行文件路徑 | str |
'/usr/bin/python3' |
sys.platform |
返回操作系統平臺標識(如 'win32', 'linux', 'darwin') |
str |
'win32' |
|
sys.byteorder |
返回當前系統字節序('little'或'big') |
str |
'little' |
|
sys.getdefaultencoding() |
返回當前默認字符編碼 | str |
'utf-8' |
|
sys.getfilesystemencoding() |
返回文件系統編碼 | str |
'utf-8' |
|
| 路徑與模塊管理 | sys.path |
當前模塊搜索路徑列表 | list[str] |
['/usr/lib/python3.12', ...] |
sys.path.append(path) |
向模塊搜索路徑添加目錄 | None |
sys.path.append('/opt/my_modules') |
|
sys.modules |
字典:記錄已加載的模塊名 → 模塊對象映射 | dict |
sys.modules['sys'] |
|
| 標準輸入輸出 | sys.stdin |
標準輸入流對象 | io.TextIOWrapper |
input_data = sys.stdin.read() |
sys.stdout |
標準輸出流對象 | io.TextIOWrapper |
sys.stdout.write("Hello\n") |
|
sys.stderr |
標準錯誤流對象 | io.TextIOWrapper |
sys.stderr.write("Error occurred\n") |
|
sys.__stdin__ / sys.__stdout__ / sys.__stderr__ |
原始標準流(未被重定向的) | io.TextIOWrapper |
常用于恢復被修改的標準流 | |
| 命令行參數 | sys.argv |
命令行參數列表(第一個是腳本名) | list[str] |
['script.py', 'arg1', 'arg2'] |
sys.argv[1:] |
獲取實際參數 | list[str] |
['arg1', 'arg2'] |
|
| 程序退出 | sys.exit([status]) |
終止程序并返回狀態碼,0表示正常退出 |
無返回 | sys.exit(1) |
sys.exitfunc (Python ??.9) |
注冊退出時執行的函數(已廢棄,建議用 atexit) |
function |
— | |
| 異常信息 | sys.exc_info() |
返回最近一次異常信息 (type, value, traceback) |
tuple |
用于異常調試 |
sys.last_type, sys.last_value, sys.last_traceback |
最近未捕獲異常的信息(交互模式下有效) | 各種對象 | — | |
| 內存與性能 | sys.getsizeof(obj) |
返回對象所占字節數 | int |
sys.getsizeof('abc') |
sys.getrefcount(obj) |
返回對象引用計數(僅 CPython 有效) | int |
sys.getrefcount(x) |
|
sys.getrecursionlimit() |
返回當前遞歸深度限制 | int |
1000 |
|
sys.setrecursionlimit(limit) |
設置遞歸深度限制(慎用) | None |
sys.setrecursionlimit(2000) |
|
sys.getswitchinterval() |
線程切換間隔(秒) | float |
0.005 |
|
sys.setswitchinterval(interval) |
修改線程切換間隔 | None |
sys.setswitchinterval(0.01) |
|
| 垃圾回收接口 | sys.getallocatedblocks() |
返回內存中分配的塊數(CPython 專有) | int |
— |
| 文件系統交互 | sys.getfilesystemencodeerrors() |
返回文件系統錯誤處理方式 | str |
'surrogateescape' |
| 交互環境 | sys.ps1, sys.ps2 |
交互模式提示符(如 >>> 和 ...) |
str |
'>>> ' |
| 解釋器狀態控制 | sys.is_finalizing() |
判斷解釋器是否正在關閉 | bool |
True / False |
四、核心功能詳解
1?? 命令行參數處理:sys.argv
# demo.py
import sys
print(sys.argv)
執行命令:
python demo.py hello world
輸出:
['demo.py', 'hello', 'world']
? 應用場景:輕量命令行工具、批處理腳本、自動化執行。
2?? 程序退出控制:sys.exit()
if error_condition:
sys.exit("發生錯誤,程序終止!")
?? 注意:
sys.exit()會拋出SystemExit異常,可被try/except捕獲。- 參數可以是數字或字符串。
3?? 標準輸入輸出重定向
import sys
# 輸出到文件
with open('out.txt', 'w') as f:
sys.stdout = f
print("輸出被寫入文件中")
# 恢復輸出
sys.stdout = sys.__stdout__
常用于日志重定向、捕獲 print 輸出。
4?? 路徑管理與動態加載模塊
import sys
# 查看模塊搜索路徑
print(sys.path)
# 添加新模塊路徑
sys.path.append('/opt/custom_modules')
? 應用場景:
-
臨時導入非標準庫或本地模塊;
-
替代環境變量
PYTHONPATH的快速調試方法。
5?? 異常信息捕獲:sys.exc_info()
import sys
try:
1 / 0
except:
exc_type, exc_value, exc_trace = sys.exc_info()
print("異常類型:", exc_type)
print("異常信息:", exc_value)
輸出:
異常類型: <class 'ZeroDivisionError'>
異常信息: division by zero
? 應用場景:
-
自定義日志系統;
-
異常鏈追蹤;
-
深層調試。
6?? 獲取解釋器環境信息
import sys
print(sys.version)
print(sys.executable)
print(sys.platform)
? 可用于:
-
多平臺兼容判斷;
-
打印運行環境診斷信息;
-
跨系統執行腳本時自動調整行為。
7?? 內存 & 性能監控函數
| 函數 | 作用 | 示例 |
|---|---|---|
sys.getsizeof(obj) |
查看對象占用的內存字節數 | sys.getsizeof([1,2,3]) → 80 |
sys.getrefcount(obj) |
查看對象引用次數(調試 GC 用) | sys.getrefcount(x) |
sys.getallocatedblocks() |
查看當前已分配內存塊數量 | 用于性能診斷 |
五、使用技巧與實戰示例
? 獲取 Python 版本判斷邏輯
import sys
if sys.version_info < (3, 8):
print("請使用 Python 3.8 及以上版本")
? 安全退出腳本并返回狀態碼
import sys
def main():
if len(sys.argv) < 2:
print("Usage: script.py <filename>")
sys.exit(1)
print(f"Processing {sys.argv[1]}")
if __name__ == "__main__":
main()
? 捕獲異常詳細日志
import sys, traceback
try:
risky_function()
except Exception:
traceback.print_exception(*sys.exc_info())
六、補充:平臺標識參考表
| 平臺 | sys.platform 值 |
說明 |
|---|---|---|
| Windows | 'win32' |
即使是 64 位系統也是 'win32' |
| Linux | 'linux' 或 'linux2'(舊版) |
— |
| macOS | 'darwin' |
— |
| AIX | 'aix' |
IBM UNIX 系統 |
| Android (PyDroid 等) | 'linux' |
與 Linux 相同 |
七、總結
| 領域 | 功能 | 常用成員 |
|---|---|---|
| 環境信息 | 獲取版本、平臺、解釋器路徑 | sys.version, sys.platform, sys.executable |
| 程序控制 | 退出、異常捕獲 | sys.exit(), sys.exc_info() |
| I/O流 | 控制輸入輸出重定向 | sys.stdin, sys.stdout, sys.stderr |
| 路徑管理 | 管理模塊加載路徑 | sys.path, sys.modules |
| 性能調優 | 獲取內存、遞歸限制 | sys.getsizeof(), sys.setrecursionlimit() |
?? 總結語
sys 模塊雖小,卻是 Python 底層運行機制的“橋梁”,
它讓你能直接觸及解釋器的“心臟”,控制執行流、管理資源、調試系統,是每位 Python 開發者必懂的核心模塊之一。

浙公網安備 33010602011771號