利用子進程透過輸入和捕獲輸出執行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中文網其他相關文章!