2017-10-04 77 views
0

我想用python子流程來執行一個腳本,這讓我感興趣的是能夠導入我的項目。在另一個進程中運行時,我只有典型的模塊,而不是進行導入時的項目。如何導入我的模塊?Python子流程我無法導入其他模塊

例子:

first_script.py

import subprocess 
from my_project.any_module import any_module 

def __init__(self): 
    subprocess.call(['python', 'path/to/exec/second_script.py']) 

second_script.py

from my_project.any_module import any_module 

def __init__(self): 
    print any_module.argument 

在第一個腳本,進口any_module作品,第二它沒有。

任何想法?謝謝。

+0

你可以給真實的代碼嗎? –

+0

您不需要通過Python運行second_script。 'subprocess.call'應該拋出'OSError'。你是不是指'subprocess.call(['python','path/to/exec/second_script.py'])? – freakish

+0

是的,對不起。我的意思是subprocess.call(['python','path/to/exec/second_script.py']) – Francesc

回答

1

my_project模塊需要在您的PYTHONPATH中,以便Python能夠找到它。 PYTHONPATH包含您當前的工作目錄,這就是您運行它時第一個腳本運行的原因。但是當你調用一個子進程時,cwd是不同的。因此,您需要將路徑my_project添加到PYTHONPATH中,並將env參數顯式指定爲,明確指定PYTHONPATH。

但是,這種方式運行Python代碼很尷尬。除非你有特定的要求來阻止這個,否則我會建議使用multiprocessing包代替在單獨的進程中運行Python代碼。

+0

如果pythonpath沒有定義,我該怎麼做?我通過添加當前路徑來定義pythonpath,並將其傳遞給env? – Francesc

+0

你應該能夠做到這一點,只需傳遞調用進程的環境:'subprocess.call(...,env = os.environ)'。 –