Python當中的subprocess模組是什麼?用途為何?
Python subprocess 模組
是什麼
subprocess 是 Python 標準函式庫中的內建模組,用於建立新的子行程 (subprocess)、執行外部程式或系統命令,並與其輸入、輸出、錯誤串流互動。
它的設計目的是取代多個較舊的函式(如 os.system、os.spawn*、os.popen* 等),提供更統一且安全的介面。
主要用途
-
執行外部命令或程式
- 在 Python 程式中呼叫系統指令(如
ls、dir、git、ffmpeg 等)。
-
取得命令的輸出結果
- 擷取 stdout、stderr,供程式後續處理。
-
傳遞輸入給外部程式
-
控制與等待子行程
- 可取得回傳碼 (return code)、等待執行完成、設定逾時 (timeout)。
常用函式與類別
| 名稱 |
說明 |
subprocess.run() |
推薦使用(Python 3.5+),執行命令並等待完成,回傳 CompletedProcess 物件 |
subprocess.Popen() |
底層類別,提供最大彈性,可非同步操作、串流互動 |
subprocess.check_output() |
執行命令並回傳其輸出 |
subprocess.call() |
較舊的介面,執行命令並回傳狀態碼 |
簡單範例
import subprocess
# 執行命令並擷取輸出
result = subprocess.run(
["echo", "Hello"],
capture_output=True,
text=True
)
print(result.stdout) # 輸出:Hello
print(result.returncode) # 回傳碼:0
使用注意事項
- 安全性:避免使用
shell=True 搭配未經驗證的使用者輸入,以防命令注入 (command injection) 攻擊。
- 建議以串列 (list) 傳遞參數(如
["ls", "-l"]),而非單一字串。
- 處理輸出為文字時,設定
text=True(或 encoding)以取得字串而非 bytes。
參考資料
[python.org]https://docs.python.org/3/library/subprocess.html