深入了解 Python subprocess 模組用法與實用範例

本篇 ShengYu 介紹 Python subprocess 模組用法與範例,在開發 Python 程式時,您是否曾經遇到需要執行外部指令或腳本的情況?無論是執行系統指令、呼叫其他應用程式,還是與外部行程進行通訊,Python 的 subprocess 模組都能滿足您的需求。本文將詳細介紹 subprocess 模組的用途,並透過一些實用範例來幫助您更好地理解和應用這個強大的工具。

為什麼選擇 subprocess 模組?

subprocess 模組的主要用途在於產生新的行程、連接到它們的輸入/輸出/錯誤管道,並取得它們的回傳狀態。這在自動化任務、腳本化系統管理以及構建複雜的應用程式時非常有用。

  1. 執行外部指令:您可以直接從 Python 程式中執行系統指令或其他腳本。
  2. 管道通訊:透過標準輸入、輸出和錯誤流與外部指令進行通訊。
  3. 捕獲指令結果:將外部指令的輸出捕獲到 Python 程式中,以便進一步處理。
  4. 處理回傳碼:檢查外部指令的回傳碼,以判斷其成功與否,並進行相應的錯誤處理。

接下來,我們將透過幾個實際範例來介紹 subprocess 模組的基本用法。

1. 執行簡單指令

以下程式碼展示了如何使用 subprocess.run 執行一個簡單的系統指令:

1
2
3
4
import subprocess

result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)

在這段程式碼中,我們執行了 ls -l 指令來列出當前目錄中的檔案。capture_output=True 表示捕獲指令的標準輸出,而 text=True 則將輸出作為文字處理。

2. 執行指令並捕獲輸出

下面的例子展示了如何執行一個指令並捕獲其輸出:

1
2
3
4
import subprocess

result = subprocess.run(['echo', 'Hello, World!'], capture_output=True, text=True)
print(result.stdout)

這段程式碼執行了 echo Hello, World! 指令,並將其輸出捕獲到變數 result.stdout 中,然後印出來。

3. 執行指令並處理錯誤

當執行指令可能失敗時,您可以使用 try-except 語句來捕獲並處理錯誤:

1
2
3
4
5
6
import subprocess

try:
result = subprocess.run(['ls', 'non_existing_file'], check=True, capture_output=True, text=True)
except subprocess.CalledProcessError as e:
print(f'Error: {e.stderr}')

在這段程式碼中,我們嘗試列出一個不存在的檔案。如果指令失敗,subprocess.CalledProcessError 會被拋出,我們可以捕獲並印出錯誤資訊。

4. 使用 Popen 進行更複雜的通訊

如果需要更靈活的通訊方式,您可以使用 subprocess.Popen

1
2
3
4
5
import subprocess

process = subprocess.Popen(['cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
stdout, stderr = process.communicate(input='Hello from Popen\n')
print(stdout)

這段程式碼使用 Popen 建立了一個行程,並透過管道將輸入發送給它,然後捕獲並印出其輸出。這種方式適用於需要與外部指令進行雙向通訊的情況。

小結

Python 的 subprocess 模組是一個非常強大的工具,能夠讓您在 Python 程式中輕鬆地執行和控制外部指令和行程。無論是簡單的指令執行還是複雜的行程通訊,subprocess 模組都能提供靈活的解決方案。透過理解和使用這些功能,您可以大幅提升 Python 應用程式的自動化和集成能力。

以上就是 Python subprocess 模組用法與實用範例的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
Python 新手入門教學懶人包