🔧 Python subprocess.Popen() 完整教學:執行外部程式與 Python 腳本

更新 發佈閱讀 4 分鐘

subprocess 是 Python 標準庫中的一個模組,用來啟動子進程(例如執行外部程式或其他 Python 腳本)。在這篇教學中,我們將聚焦於 subprocess.Popen() 的實際應用,並結合執行 Python 腳本的情境進行說明。


📌 為什麼使用 subprocess.Popen()

  • 需要非同步執行外部命令(不會卡住主程式)
  • 可以細緻控制標準輸入(stdin)、輸出(stdout)、錯誤(stderr)
  • 適合進階用途(例如啟動多個子程式、管理子進程輸入輸出)

🧠 基本語法

import subprocess

p = subprocess.Popen(
cmd, # 要執行的命令(list 或 str)
stdout=subprocess.PIPE, # 接收標準輸出
stderr=subprocess.PIPE, # 接收錯誤輸出
stdin=subprocess.PIPE, # 可提供輸入
text=True, # 輸出為文字格式(Python 3.7+
shell=False # 是否用 shell 執行
)

📁 執行 Python 檔案的基本範例

假設你有一個 test_script.py

# test_script.py
print("Hello from test_script!")

你可以用 subprocess.Popen() 來執行它:

import subprocess

cmd = ["python", "test_script.py"]
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

stdout, stderr = process.communicate()

print("Output:", stdout)
print("Errors:", stderr)

🕹️ 常見應用情境

✅ 1. 執行另一個 Python 腳本並取得輸出

cmd = ["python", "other_script.py", "--arg1", "value1"]
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
stdout, stderr = p.communicate()

if p.returncode == 0:
print("執行成功:", stdout)
else:
print("錯誤發生:", stderr)

✅ 2. 非同步執行(不等他跑完)

p = subprocess.Popen(["python", "long_task.py"])
print("主程式繼續執行,不等 long_task.py 結束")

✅ 3. 非同步 + 監控狀態

import time

p = subprocess.Popen(["python", "long_task.py"])

while p.poll() is None:
print("子程式還在跑...")
time.sleep(1)

print("子程式結束,return code:", p.returncode)





留言
avatar-img
留言分享你的想法!
avatar-img
螃蟹_crab的沙龍
153會員
299內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。
螃蟹_crab的沙龍的其他內容
2025/06/09
當你在開發 Python 應用時,常會使用 logging 模組來記錄程式運行的資訊。不過,你可能會遇到這個令人困惑的問題: 當 logging 模組一開始就已經「有 handler」時,你後續設定的 basicConfig() 完全無效! 這篇文章將完整解析這個問題的根本原因、如何重現、以及該
2025/06/09
當你在開發 Python 應用時,常會使用 logging 模組來記錄程式運行的資訊。不過,你可能會遇到這個令人困惑的問題: 當 logging 模組一開始就已經「有 handler」時,你後續設定的 basicConfig() 完全無效! 這篇文章將完整解析這個問題的根本原因、如何重現、以及該
2025/05/27
隨著 Apple 設備越來越普及,許多人在傳輸或下載 iPhone 照片時,會發現照片的副檔名變成了 .HEIC。這種檔案在 Windows 系統上常常無法直接開啟或編輯,因此了解如何將 .HEIC 圖片轉換成更通用的 .PNG 格式就變得非常重要。 本文將帶你一步步了解 HEIC 是什麼,並使用
Thumbnail
2025/05/27
隨著 Apple 設備越來越普及,許多人在傳輸或下載 iPhone 照片時,會發現照片的副檔名變成了 .HEIC。這種檔案在 Windows 系統上常常無法直接開啟或編輯,因此了解如何將 .HEIC 圖片轉換成更通用的 .PNG 格式就變得非常重要。 本文將帶你一步步了解 HEIC 是什麼,並使用
Thumbnail
2025/04/15
在軟體開發或部署過程中,我們經常需要對多個 .ini 設定檔進行批次修改,例如將某個舊的參數名稱或路徑名稱,替換成新的命名。 這就像記事本的「全部取代」功能,但你不需要一個個打開檔案慢慢點——你可以用 Python 自動完成這些事! 本文將介紹一個 Python 函式:search_and_re
2025/04/15
在軟體開發或部署過程中,我們經常需要對多個 .ini 設定檔進行批次修改,例如將某個舊的參數名稱或路徑名稱,替換成新的命名。 這就像記事本的「全部取代」功能,但你不需要一個個打開檔案慢慢點——你可以用 Python 自動完成這些事! 本文將介紹一個 Python 函式:search_and_re
看更多
你可能也想看
Thumbnail
蝦皮分潤計畫讓我在分享旅遊文章時,也能透過推薦好物累積被動收入,貼補旅行基金。這篇文章,除了介紹計畫的操作亮點與心得,也分享我最常應用的案例:「旅行必備小物 TOP5」,包含行李鎖、免洗內衣褲、分裝瓶、折疊衣架與真空壓縮袋,幫助出國打包更輕鬆。想同時記錄旅行、分享好物又創造額外收入的你,千萬別錯過!
Thumbnail
蝦皮分潤計畫讓我在分享旅遊文章時,也能透過推薦好物累積被動收入,貼補旅行基金。這篇文章,除了介紹計畫的操作亮點與心得,也分享我最常應用的案例:「旅行必備小物 TOP5」,包含行李鎖、免洗內衣褲、分裝瓶、折疊衣架與真空壓縮袋,幫助出國打包更輕鬆。想同時記錄旅行、分享好物又創造額外收入的你,千萬別錯過!
Thumbnail
想增加被動收入?加入蝦皮分潤計畫是輕鬆上手的好方法!本文提供完整教學,包含申請流程、賺取分潤技巧,以及實際使用心得分享,助你輕鬆獲得額外收入。
Thumbnail
想增加被動收入?加入蝦皮分潤計畫是輕鬆上手的好方法!本文提供完整教學,包含申請流程、賺取分潤技巧,以及實際使用心得分享,助你輕鬆獲得額外收入。
Thumbnail
介紹如何用assign函數在Python中建立新欄位
Thumbnail
介紹如何用assign函數在Python中建立新欄位
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
本文詳細解說了 Python print() 函數的各種隱藏語法,包括 value、sep、end、file 和 flush。作者以清晰的範例和解說,讓從未接觸程式語言的人也能夠理解。而最後提到了訂閱房間的付費方式,並歡迎大家訂閱。文章內容較為詳細,提供了豐富的資訊。
Thumbnail
本文詳細解說了 Python print() 函數的各種隱藏語法,包括 value、sep、end、file 和 flush。作者以清晰的範例和解說,讓從未接觸程式語言的人也能夠理解。而最後提到了訂閱房間的付費方式,並歡迎大家訂閱。文章內容較為詳細,提供了豐富的資訊。
Thumbnail
當你需要在 Python 中執行多個任務,但又不希望它們相互阻塞時,可以使用 threading 模組。 threading 模組允許你在單個程序中創建多個執行緒,這些執行緒可以同時運行,從而實現並行執行多個任務的效果。
Thumbnail
當你需要在 Python 中執行多個任務,但又不希望它們相互阻塞時,可以使用 threading 模組。 threading 模組允許你在單個程序中創建多個執行緒,這些執行緒可以同時運行,從而實現並行執行多個任務的效果。
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
Thumbnail
本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News