0

我正在嘗試創建一個調用其他5個python腳本的同時傳遞數組,然後傳遞5個腳本中的每一個的python腳本對該數組執行操作並將不同的數組返回到初始腳本。同時從Python調用腳本,向每個腳本傳遞數據,並將數據返回到原始的

初始腳本然後意識到何時5已經返回值,然後對這5個數組執行操作。

我認爲解決方案是類似於 os.system(./script1.py arg1),os.system(./script2.py arg2) 但我不確定如何繼續。

+0

如果您想同時運行這五個腳本,則不應該使用'os.system'。使用'subprocess'模塊。 – kindall

回答

0

您可以使用線程池並行運行所有命令。我也轉換到抓取程序輸出的subprocess模塊:

import multiprocessing.pool 
import subprocess as subp 

def worker(script): 
    proc = subp.Popen(script, shell=True, stdout=subp.PIPE, stderr=subp.PIPE) 
    out, err = proc.communicate() 
    return script, out, err, proc.returncode 

scripts = ['./script1.py arg1', './script2.py arg2'] 
pool = multiprocessing.pool.ThreadPool(len(scripts)) 
for script, out, err, returncode in pool.map(worker, scripts): 
    do your magic 
pool.close() 
pool.join() 
+0

這看起來有點像我以後的樣子,但是我不清楚腳本是什麼,出來,..你的魔法是爲了什麼。另外在哪裏返回不同腳本的輸出? –

+0

池在「腳本」中爲每個項目創建一個線程。 'pool.map'將每個腳本和工作者函數發送給線程,然後作爲迭代器將工作返回值傳遞給主程序。所以,for循環會依次獲取每個腳本的結果。根據你想要如何處理數據,你可以處理返回的內容以及它的組裝方式。例如,'worker'可以返回'out',你可以得到一個輸出列表爲'outputs = list(pool.map(worker,scripts))'。 – tdelaney

+0

哇。非常感謝。這工作很好。有沒有辦法可以將每個腳本的輸出與打印內容分開?即在pool.map中是否有返回值以及超值? –

相關問題