首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python sys 模組深度解析:執行環境、模組系統、I/O 重導向與程式結束控制

     編輯:更多程式設計知識

sys 模組提供對 Python 解譯器執行時環境的直接存取。從命令列參數、模組搜尋路徑、標準串流控制到程式結束機制,是撰寫系統級腳本與工具的必備利器。本文系統梳理六大核心應用場景。

1. 命令列參數處理:sys.argv

sys.argv 是字串列表,argv[0] 為腳本名稱,其餘為參數。

import sys

print(f"腳本名稱: {sys.argv[0]}")
if len(sys.argv) > 1:
    print(f"參數數量: {len(sys.argv)-1}")
    for i, arg in enumerate(sys.argv[1:], 1):
        print(f"  參數{i}: {arg}")
else:
    print("無參數")

# 特殊情況:
# python < script.py     -> argv[0] == ''
# python -c "code"       -> argv[0] == '-c'

2. 模組搜尋路徑控制:sys.path

sys.path 是目錄字串列表,Python 依序搜尋匯入模組。啟動時由 PYTHONPATH、註冊表、預設路徑初始化。可在執行期動態修改:

import sys

print(f"路徑數量: {len(sys.path)}")
sys.path.insert(0, './my_modules')  # 優先搜尋專案本地模組
import my_custom_module

# 極端範例:清空路徑後仍可匯入內建模組
sys.path = []
import random  # 內建模組不受影響

3. 內建與已載入模組查詢


# 判斷模組是否為內建
def dump(module_name):
    print(f"{module_name} => ", end='')
    if module_name in sys.builtin_module_names:
        print("<內建>")
    else:
        m = __import__(module_name)
        print(m.__file__)

for mod in ['os', 'sys', 'json', 'collections', 'numpy']:
    dump(mod)

# 列出所有已載入模組
print(list(sys.modules.keys()))

4. 平台資訊:sys.platform


import sys
print(sys.platform)  # 'win32', 'linux', 'darwin', 'cygwin' 等

5. 標準串流控制與重導向

sys.stdout、sys.stderr、sys.stdin 為類檔案物件(僅支援 write/readline 等)。


import sys

# 一般 print 等同於:
sys.stdout.write('Hello\n')

# 重導向 stdout 到檔案
save_out = sys.stdout
with open('output.log', 'w') as f:
    sys.stdout = f
    print('這行寫入檔案,不顯示螢幕')
sys.stdout = save_out  # 恢復

# 重導向 stderr 捕獲錯誤
with open('error.log', 'w') as f:
    sys.stderr = f
    raise RuntimeError('錯誤被導向檔案')

# 快速寫入 stderr(不影響後續 print)
print('警告訊息', file=sys.stderr)

6. 程式結束機制:sys.exit() 與 sys.exitfunc

sys.exit(n) 拋出 SystemExit 例外(非立即結束),可被 try/except 捕獲:


import sys

print("開始")
try:
    sys.exit(1)
except SystemExit:
    print("捕獲退出,繼續執行")
print("結束")

# 註冊結束處理函數(Python 3 建議用 atexit 模組)
def cleanup():
    print("清理資源...")

sys.exitfunc = cleanup  # 僅 Python 2 風格,Python 3 請用 atexit.register(cleanup)
print("設定完成")
sys.exit(0)

總結

sys 模組是通往 Python 執行核心的橋樑。掌握 argv、path、串流重導向與 exit 機制,能讓你撰寫出更專業的命令列工具、測試腳本與系統整合程式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved