首頁  >  文章  >  後端開發  >  如何使用Subprocess執行Python腳本、傳遞輸入並捕獲輸出?

如何使用Subprocess執行Python腳本、傳遞輸入並捕獲輸出?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-25 18:43:33720瀏覽

How Can I Use Subprocess to Execute Python Scripts, Pass Input, and Capture Output?

利用子進程透過輸入和捕獲輸出執行Python 腳本

當任務是使用subprocess 模組從另一個腳本呼叫Python 腳本時,您可能會面臨傳遞輸入並在變數中獲取所需輸出的障礙。本文將深入探討這些挑戰的解決方案,使您能夠有效地利用子流程的強大功能。

為了做好準備,請考慮一個場景,其中您有兩個 Python 腳本:a.py 和 b.py。腳本 a.py 提示使用者進行某些查詢並產生 JSON 格式的輸出。 B.py 的目標是呼叫 a.py,提供必要的輸入,並捕獲輸出。

實現這一點的關鍵在於利用 subprocess 模組的 check_output 方法。此方法將包含 Python 可執行檔和 a.py 路徑的命令清單作為輸入。它將指定的輸入(在本例中為一系列查詢)提供給 a.py 並將其標準輸出捕獲為字串。

以下是示範此方法的範例程式碼片段:

<code class="python">import os
import sys
from subprocess import check_output

script_path = os.path.join(get_script_dir(), 'a.py')
output = check_output([sys.executable, script_path],
                      input='\n'.join(['query 1', 'query 2']),
                      universal_newlines=True)</code>

或者,您可以選擇更靈活的方法,從b.py 匯入模組a 並呼叫a.py 中的函數。然而,確保 a.py 使用 if __name__=="__main__" 保護來防止在導入時執行不必要的程式碼是至關重要的。

如果效能最佳化是您的主要關注點,請考慮利用多重處理來分發您的跨多個進程的查詢。當查詢處理是 CPU 密集時,這種方法特別有用,因為它可以潛在地縮短執行時間。

以下程式碼片段說明如何實現此目的:

<code class="python">from multiprocessing import freeze_support, Pool
import a

if __name__ == "__main__":
   freeze_support()
   pool = Pool() # use all available CPUs
   result = pool.map(a.search, ['query 1', 'query 2'])</code>

透過掌握這些技術,您將能夠透過輸入無縫執行Python 腳本、捕獲其輸出,並利用子進程的強大功能來滿足您的腳本需求。

以上是如何使用Subprocess執行Python腳本、傳遞輸入並捕獲輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn