Python 中的 subprocess.run 完整指南與範例

本篇 ShengYu 介紹 Python subprocess.run 用法與範例,在現代編程中,經常需要從 Python 程式中執行系統指令或外部程式。Python 提供了多種方式來實現這一點,其中最強大和靈活的工具之一就是 subprocess 模組中的 subprocess.run 函式。本文將詳盡介紹 subprocess.run 的用途、語法,並透過具體範例來展示其應用。

subprocess.run 的用途

subprocess.run 是一個用於執行系統指令或外部程式的高級接口。它允許開發者執行指令、等待指令完成、檢查指令的退出狀態碼,並選擇性地取得指令的標準輸出和標準錯誤。這使得 subprocess.run 成為一個非常靈活和強大的工具,適合各種需要與外部程式互動的場景。

subprocess.run 的語法

1
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None)

參數說明

  • args:這是要執行的指令及其參數,通常以清單形式提供,例如 ['ls', '-l']
  • stdinstdoutstderr:分別指定標準輸入、標準輸出和標準錯誤的處理方式。
  • capture_output:若設定為 True,將捕獲標準輸出和標準錯誤。
  • shell:若設定為 True,指令將透過 shell 執行(例如 bashcmd)。
  • cwd:設定指令執行的當前工作目錄。
  • timeout:設定指令執行的超時時間(以秒為單位)。
  • check:若設定為 True,當指令回傳非零退出狀態時將拋出 CalledProcessError
  • encodingerrors:設定標準輸入、輸出和錯誤的編碼和錯誤處理。
  • textuniversal_newlines:若設定為 True,將輸入和輸出視為文字流,而非位元組流。
  • env:提供一個字典來設定環境變數。

範例 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=Truetext=True,我們能夠捕獲並以文字形式處理指令的標準輸出。

範例 2:檢查指令的退出狀態

在某些情況下,我們需要檢查指令的退出狀態以確定其是否成功執行。以下範例展示了如何實現這一點:

1
2
3
4
5
6
7
import subprocess

result = subprocess.run(['ls', '-l', '/nonexistent'], capture_output=True, text=True)
if result.returncode != 0:
print("Error:", result.stderr)
else:
print(result.stdout)

這段程式碼執行 ls -l /nonexistent 指令,如果目錄不存在,則會打印錯誤資訊。

範例 3:在 shell 中執行指令

有時我們需要透過 shell 來執行指令,例如使用環境變數。以下範例展示了如何設定 shell=True 來達成這一目標:

1
2
3
4
import subprocess

result = subprocess.run('echo $HOME', shell=True, capture_output=True, text=True)
print(result.stdout)

這段程式碼在 shell 中執行 echo $HOME 指令並打印出環境變數 HOME 的值。

範例 4:處理指令超時

在某些情況下,指令可能會執行很長時間。在這種情況下,我們可以設定超時來防止指令無限期地執行:

1
2
3
4
5
6
import subprocess

try:
result = subprocess.run(['sleep', '5'], timeout=2)
except subprocess.TimeoutExpired:
print("Command timed out")

這段程式碼嘗試執行 sleep 5 指令,但設定了 2 秒的超時時間。由於指令需要更長時間才能完成,因此會拋出 TimeoutExpired 異常。

結論

subprocess.run 是 Python 中一個非常有用的函式,用於執行外部指令並處理其輸出。透過理解其各種參數和選項,您可以靈活地將其應用於多種場景,無論是簡單的指令執行還是複雜的行程管理。本文透過具體的範例展示了 subprocess.run 的一些常見用法,希望能幫助您更好地掌握這個強大的工具。

透過這些範例和解釋,相信您已經對 subprocess.run 有了一個全面的了解。不妨在自己的項目中嘗試使用,進一步體會其強大和靈活性。

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

其它相關文章推薦
Python 新手入門教學懶人包
Python subprocess.call 用法與範例解析
Python subprocess.Popen 用法與範例
Python swap 用法與範例
如何在Python中使用SQLite:完整指南與實用範例
Python 與 MongoDB 的完美結合:詳細指南與範例