[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 識別的文字
vocus|新世代的創作平台

這裡,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)
vocus|新世代的創作平台

這段程式碼會直接將 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:存儲命令的標準錯誤。
vocus|新世代的創作平台
留言
avatar-img
螃蟹_crab的沙龍
167會員
322內容數
本業是影像辨識軟體開發,閒暇時間進修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
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
該篇文章首要為 1.下載python與文字編輯器vs code (Visual Studio Code) 2.撰寫第一支python程式
Thumbnail
該篇文章首要為 1.下載python與文字編輯器vs code (Visual Studio Code) 2.撰寫第一支python程式
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
subprocess.run() 是 Python 3.5 之後引入的一個簡單且強大的函數,用來執行系統命令並等待命令完成。它是 subprocess 模組的高階 API,封裝了低階的 Popen(),提供了更簡便的方式來執行命令、捕獲輸出、處理錯誤等操作。
Thumbnail
subprocess.run() 是 Python 3.5 之後引入的一個簡單且強大的函數,用來執行系統命令並等待命令完成。它是 subprocess 模組的高階 API,封裝了低階的 Popen(),提供了更簡便的方式來執行命令、捕獲輸出、處理錯誤等操作。
Thumbnail
Python 基本語法 python 語法的後綴名是以.py 結尾 python 執行方式 使用交互介面執行 使用 python test.py 命令執行 使用./test.py 執行 python 標示符 以單下劃線開頭的屬性,表示是類的私有屬性(包括方法,變量)。如:_foo表示不能直接訪問的類
Thumbnail
Python 基本語法 python 語法的後綴名是以.py 結尾 python 執行方式 使用交互介面執行 使用 python test.py 命令執行 使用./test.py 執行 python 標示符 以單下劃線開頭的屬性,表示是類的私有屬性(包括方法,變量)。如:_foo表示不能直接訪問的類
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 我們是不是常常看到一些很厲害的專案, 只要「pip i
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 我們是不是常常看到一些很厲害的專案, 只要「pip i
Thumbnail
在第九課中,我們將學習 Python 的文件讀取與寫入。 Python 提供了一些內建的函式,使我們能夠輕鬆讀取和寫入文件。
Thumbnail
在第九課中,我們將學習 Python 的文件讀取與寫入。 Python 提供了一些內建的函式,使我們能夠輕鬆讀取和寫入文件。
Thumbnail
在第十四課中,我們將探討 Python 中的檔案操作,包括如何讀取、寫入和管理文件。這對於許多實際應用場景都是必要的,例如日誌記錄、資料分析和資料持久化。
Thumbnail
在第十四課中,我們將探討 Python 中的檔案操作,包括如何讀取、寫入和管理文件。這對於許多實際應用場景都是必要的,例如日誌記錄、資料分析和資料持久化。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
在第五課中,我們將探討 Python 中的函式(functions)。 函式是一種讓我們可以將程式碼塊組織成一個獨立、可重複使用的單元的方式。函式可以接受參數 (arguments) 並返回一個結果。
Thumbnail
在第五課中,我們將探討 Python 中的函式(functions)。 函式是一種讓我們可以將程式碼塊組織成一個獨立、可重複使用的單元的方式。函式可以接受參數 (arguments) 並返回一個結果。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News