Python當中的subprocess模組是什麼?用途為何?
Python subprocess 模組
什麼是 subprocess?
subprocess 是 Python 標準函式庫中的內建模組,用於建立與管理子行程(child process)。它允許你在 Python 程式中執行外部指令或其他程式,並與其互動。
主要用途
-
執行外部指令
- 呼叫作業系統的命令(如
ls、dir、ping 等)或其他可執行程式。
-
取得指令的輸出結果
- 擷取子行程的標準輸出(stdout)與標準錯誤(stderr)。
-
傳入資料給子行程
- 透過標準輸入(stdin)將資料傳送給執行中的程式。
-
控制行程流程
- 等待行程結束、取得回傳碼(return code)、判斷執行是否成功。
常用函式與類別
| 名稱 |
說明 |
subprocess.run() |
推薦使用(Python 3.5+),執行指令並等待完成,回傳 CompletedProcess 物件 |
subprocess.Popen() |
較底層的類別,提供更彈性的行程控制(如非同步執行、串流互動) |
subprocess.check_output() |
執行並直接回傳輸出結果 |
subprocess.call() |
舊式介面,執行並回傳退出碼 |
簡單範例
import subprocess
# 執行指令並擷取輸出
result = subprocess.run(
["echo", "Hello World"],
capture_output=True,
text=True
)
print(result.stdout) # 輸出: Hello World
print(result.returncode) # 回傳碼: 0 (代表成功)
使用注意事項
- 安全性:避免使用
shell=True 搭配未經驗證的使用者輸入,以防止指令注入攻擊。
- 取代舊模組:
subprocess 用來取代較舊的 os.system、os.spawn* 等函式,是官方建議的做法。
- 參數格式:建議以「列表(list)」形式傳入指令與參數(如
["ls", "-l"]),而非單一字串。
參考資料
[python.org]https://docs.python.org/3/library/subprocess.html