Python sys 系統參數與函數

sys 模組是 Python 的內建模組,主要提供與 Python 解譯器 (Interpreter) 及其與所在作業系統環境互動的變數與函數。它是我們在撰寫命令列工具 (CLI) 與進行底層系統設定時最重要的工具之一。

常用屬性與變數

命令列參數 (sys.argv)

這是 sys 最常用的功能。它是一個列表,包含了啟動 Python 命令時傳入的所有參數。

import sys

# argv[0] 總是程式檔案本身的名稱
print(f"程式名稱: {sys.argv[0]}")

# argv[1:] 則是傳入的參數
if len(sys.argv) > 1:
    print(f"接收到的參數: {sys.argv[1:]}")
else:
    print("未提供額外參數")

示範執行:

python main.py upload data.csv
# 輸出:
# 程式名稱: main.py
# 接收到的參數: ['upload', 'data.csv']

模組搜尋路徑 (sys.path)

當你執行 import 時,Python 會依照 sys.path 列表中的順序尋找模組。

import sys

# 列出所有搜尋路徑
for path in sys.path:
    print(path)

# 動態新增搜尋路徑 (例如匯入不同資料夾下的模組)
# sys.path.append('/path/to/custom/modules')

系統與解譯器資訊

import sys

# Python 版本資訊
print(sys.version)

# 所在平台 (win32, linux, darwin 等)
print(sys.platform)

# 最大整數值
print(sys.maxsize)

常用函式

結束程式 (sys.exit)

用來強行中止程式的執行。你可以傳入一個整數代表結束狀態碼(0 代表成功,非零代表發生錯誤)。

import sys

def run():
    if not check_config():
        print("設定錯誤,程式終止。")
        sys.exit(1)  # 異常結束

    print("運作中...")
    sys.exit(0)  # 正常結束 (預設)

run()

標準串流 (stdin, stdout, stderr)

你可以透過 sys 直接操控標準輸入輸出。例如,將錯誤訊息輸出到 stderr

import sys

# 一般輸出
sys.stdout.write("這是標準輸出\n")

# 錯誤輸出 (通常會顯示在終端機列印中,但在某些重導向環境中會與 stdout 分開)
sys.stderr.write("這是錯誤訊息\n")

實務案例:簡易參數解析器

雖然複雜的參數解析建議使用 argparse,但簡單的任務可以直接透過 sys.argv 完成:

import sys

def main():
    if len(sys.argv) < 2:
        print("用法: python script.py [greet|version]")
        return

    command = sys.argv[1]

    if command == "greet":
        name = sys.argv[2] if len(sys.argv) > 2 else "訪客"
        print(f"你好, {name}!")
    elif command == "version":
        print(f"Python 版本: {sys.version.split()[0]}")
    else:
        print(f"未知指令: {command}")

if __name__ == "__main__":
    main()

總結

sys 模組是連結 Python 程式與外界環境的橋樑:

  • 使用 sys.argv 獲取啟動參數。
  • 使用 sys.path 管理模組載入位置。
  • 使用 sys.exit() 精確控制程式結束點。
  • 使用 sys.platform 處理跨平台兼容性邏輯。