[Python]在 Python 中執行外部命令或可執行文件

更新於 發佈於 閱讀時間約 9 分鐘

subprocess.run() 是 Python 3.5 之後引入的一個簡單且強大的函數,用來執行系統命令並等待命令完成。它是 subprocess 模組的高階 API,封裝了低階的 Popen(),提供了更簡便的方式來執行命令、捕獲輸出、處理錯誤等操作。


先用Python 調用 Tesseract OCR來帶入了解,subprocess.run()如何使用


你可以使用 subprocess.run() 調用 tesseract 來處理圖像。假設你有一個名為 image.png 的圖像文件,並希望使用 Tesseract 將圖像中的文字提取到 output.txt 文件中。

import subprocess

# 調用 Tesseract 進行 OCR,將結果輸出到文本文件
subprocess.run(['tesseract', 'image.png', 'output'], capture_output=True, text=True)

# Tesseract 會生成一個名為 'output.txt' 的文件,該文件包含 OCR 識別的文字
raw-image

這裡,tesseract 的基本語法是:

tesseract <input_image> <output_base_name> [options]

這樣就能夠調用 Tesseract 進行 OCR 並將結果保存到 output.txt 中。

4. 獲取結果到 Python 變數

如果希望將 Tesseract 的輸出直接返回到 Python 變數,而不寫入文件中,可以使用 Tesseract 的標準輸出選項 stdout

import subprocess

# 調用 Tesseract 並將結果捕獲到變量
result = subprocess.run(['tesseract', 'image.png', 'stdout'], capture_output=True, text=True)

# 輸出 OCR 結果
print(result.stdout)
raw-image

這段程式碼會直接將 Tesseract 的輸出結果(識別出的文字)寫到到 result.stdout,並且可以立即在 Python 中處理該結果。

5. 設定語言

Tesseract 支援多種語言識別,你可以使用 -l 參數來指定要識別的語言。假設你要識別中文(chi_sim),可以這樣做:

​# 指定語言參數進行 OCR
subprocess.run(['tesseract', 'image.png', 'output', '-l', 'chi_sim'], capture_output=True, text=True)

這會讓 Tesseract 使用chi_sim進行 OCR 識別。

6. 使用配置參數調整 OCR 行為

Tesseract 提供了許多配置選項,可以通過命令行傳遞來調整 OCR 行為。例如,如果你需要更好地處理噪音圖像,可以使用一些 Tesseract 提供的參數進行優化。

# 使用 Tesseract 配置參數
subprocess.run(['tesseract', 'image.png', 'output', '--psm', '6'], capture_output=True, text=True)

這裡的 --psm 參數用於設置頁面分段模式(PSM,Page Segmentation Mode),例如 6 表示完全單一的文本塊。


subprocess.run() 的詳細分解

調用外部應用程式

當你用 subprocess.run() 調用 tesseract 時,系統會在環境變數中查找 Tesseract,然後執行它。你可以向 tesseract 傳遞命令行參數,如圖像文件名、輸出文件名、語言設置等,這些參數會被傳遞給 Tesseract 的可執行文件來進行處理。

例如,這一行代碼:

subprocess.run(['tesseract', 'image.png', 'output', '-l', 'chi_sim'], capture_output=True, text=True)
  • 'tesseract': 系統會從 PATH 中查找 Tesseract 的可執行文件並啟動它。
  • 'image.png': 這是你要進行 OCR 處理的圖像。
  • 'output': 這是輸出文件的基礎名稱,Tesseract 會將結果寫入 output.txt
  • '-l', 'chi_sim': 這些是命令行參數,指定 Tesseract 使用chi_sim進行 OCR。


以下是對 subprocess.run() 函數的詳細介紹和參數說明:

函數

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)

1. args

args 是你要傳入的命令或程序及其參數。它可以是列表或字符串,取決於 shell 參數如何設置,預設是shell=False。

  • 列表形式(推薦):
    subprocess.run(['ls', '-l'])
    列表中的每一項都對應一個命令或參數。這樣的方式會避免命令被解析成單個字符串,從而提高安全性。
  • 字符串形式: 當 shell=True 時,可以直接用字符串形式來執行命令:
    subprocess.run('ls -l', shell=True)
  • shell=False 時,args 通常以 列表 形式傳入,每個命令和參數分別作為一個列表元素。
  • shell=True 時,args 可以以 字符串 形式傳入,讓整個命令交由 shell 解釋。


2. stdin, stdout, stderr

這三個參數用來控制標準輸入、標準輸出和標準錯誤的處理方式。它們可以設置為以下值:

  • None(預設):輸出直接顯示在當前的終端中。
  • PIPE:將輸入或輸出捕獲到變量中,後續可用來進行處理。


3. capture_output=True 與 text=True



capture_output=True 參數的作用是告訴 Python 將外部程序的 標準輸出(stdout)和 標準錯誤(stderr)捕獲起來,以便你在 Python 程序中進行處理。當這個參數設置為 True 時,輸出將不會顯示在終端或控制台上,而是會存儲在返回的 CompletedProcess 對象中,並可以通過 stdoutstderr 來訪問。


text=True

text=True 參數告訴 subprocess.run(),要將捕獲到的 輸出(stdout)錯誤(stderr) 轉換為 字符串(string),而不是原始的 字節串(bytes)

  • text=False(或省略這個參數)時,stdoutstderr 的輸出會是 位元資料(bytes),這是默認行為。
  • text=True 時,這些位元資料會被自動解碼為 字串(string) 格式,這樣可以更方便處理。


範例

import subprocess

# 調用 Tesseract 進行 OCR,將結果輸出到文本文件
result = subprocess.run(['tesseract', r'', 'output', '-l', 'eng', '--psm', '6'], capture_output=True, text=True)

# 顯示標準錯誤 (stderr)
print(result.stderr)
  • result.stdout:存儲命令的標準輸出。
  • result.stderr:存儲命令的標準錯誤。
raw-image
留言
avatar-img
留言分享你的想法!
avatar-img
螃蟹_crab的沙龍
145會員
253內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
螃蟹_crab的沙龍的其他內容
2025/04/15
在軟體開發或部署過程中,我們經常需要對多個 .ini 設定檔進行批次修改,例如將某個舊的參數名稱或路徑名稱,替換成新的命名。 這就像記事本的「全部取代」功能,但你不需要一個個打開檔案慢慢點——你可以用 Python 自動完成這些事! 本文將介紹一個 Python 函式:search_and_re
2025/04/15
在軟體開發或部署過程中,我們經常需要對多個 .ini 設定檔進行批次修改,例如將某個舊的參數名稱或路徑名稱,替換成新的命名。 這就像記事本的「全部取代」功能,但你不需要一個個打開檔案慢慢點——你可以用 Python 自動完成這些事! 本文將介紹一個 Python 函式:search_and_re
2025/04/11
🐶 什麼是 Watchdog? Watchdog 是一個 Python 套件,用來即時監控檔案系統的變化。它可以在資料夾內有「新增」、「修改」、「刪除」等事件時,立即觸發事件處理函式,不需要手動輪詢 (polling),效率高又省資源。 ✅ Watchdog 的特點: 採用 OS 層級的檔案
2025/04/11
🐶 什麼是 Watchdog? Watchdog 是一個 Python 套件,用來即時監控檔案系統的變化。它可以在資料夾內有「新增」、「修改」、「刪除」等事件時,立即觸發事件處理函式,不需要手動輪詢 (polling),效率高又省資源。 ✅ Watchdog 的特點: 採用 OS 層級的檔案
2025/01/12
用 PyInstaller 打包一個簡單計算機應用 (GUI 使用 PyQt5) 本教學將帶您使用 PyQt5 建立一個簡單的計算機應用,並透過 PyInstaller 將其打包成執行檔(EXE)。 1. 安裝所需環境 在開始之前,請確保您已安裝以下工具: 必要套件 Python: 建
Thumbnail
2025/01/12
用 PyInstaller 打包一個簡單計算機應用 (GUI 使用 PyQt5) 本教學將帶您使用 PyQt5 建立一個簡單的計算機應用,並透過 PyInstaller 將其打包成執行檔(EXE)。 1. 安裝所需環境 在開始之前,請確保您已安裝以下工具: 必要套件 Python: 建
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹 Python 中非常重要且常用的內建函數 print()。 print() 函數的主要作用是將指定的物件 (object) 輸出到標準輸出流 (standard output stream),預設情況下這個標準輸出流會連接到您的終端機 (terminal) 或控制台 (console)。簡單
Thumbnail
介紹 Python 中非常重要且常用的內建函數 print()。 print() 函數的主要作用是將指定的物件 (object) 輸出到標準輸出流 (standard output stream),預設情況下這個標準輸出流會連接到您的終端機 (terminal) 或控制台 (console)。簡單
Thumbnail
subprocess.run() 是 Python 3.5 之後引入的一個簡單且強大的函數,用來執行系統命令並等待命令完成。它是 subprocess 模組的高階 API,封裝了低階的 Popen(),提供了更簡便的方式來執行命令、捕獲輸出、處理錯誤等操作。
Thumbnail
subprocess.run() 是 Python 3.5 之後引入的一個簡單且強大的函數,用來執行系統命令並等待命令完成。它是 subprocess 模組的高階 API,封裝了低階的 Popen(),提供了更簡便的方式來執行命令、捕獲輸出、處理錯誤等操作。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 我們是不是常常看到一些很厲害的專案, 只要「pip i
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 我們是不是常常看到一些很厲害的專案, 只要「pip i
Thumbnail
在第十四課中,我們將探討 Python 中的檔案操作,包括如何讀取、寫入和管理文件。這對於許多實際應用場景都是必要的,例如日誌記錄、資料分析和資料持久化。
Thumbnail
在第十四課中,我們將探討 Python 中的檔案操作,包括如何讀取、寫入和管理文件。這對於許多實際應用場景都是必要的,例如日誌記錄、資料分析和資料持久化。
Thumbnail
在第九課中,我們將學習 Python 的文件讀取與寫入。 Python 提供了一些內建的函式,使我們能夠輕鬆讀取和寫入文件。
Thumbnail
在第九課中,我們將學習 Python 的文件讀取與寫入。 Python 提供了一些內建的函式,使我們能夠輕鬆讀取和寫入文件。
Thumbnail
在第五課中,我們將探討 Python 中的函式(functions)。 函式是一種讓我們可以將程式碼塊組織成一個獨立、可重複使用的單元的方式。函式可以接受參數 (arguments) 並返回一個結果。
Thumbnail
在第五課中,我們將探討 Python 中的函式(functions)。 函式是一種讓我們可以將程式碼塊組織成一個獨立、可重複使用的單元的方式。函式可以接受參數 (arguments) 並返回一個結果。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News