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處理跨平台兼容性邏輯。