2017-10-04 20 views
0

スクリプトを実行するためにpythonのサブプロセスを使用しようとしています。私のプロジェクトのインポートを行うことができます。別のプロセスで実行しているとき、私はインポートの際に私のプロジェクトのモジュールではなく、典型的なモジュールしか持っていません。モジュールをインポートするにはどうしたらいいですか?Pythonのサブプロセス他のモジュールをインポートできません

例:最初のスクリプトで

from my_project.any_module import any_module 

def __init__(self): 
    print any_module.argument 

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、インポートany_module作品は、第二にそれはありません。

アイデア?どうも。

+0

実際のコードを教えてください。 –

+0

second_scriptはPythonで実行しません。 '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モジュールは、Pythonが見つけることができるようにPYTHONPATH内にある必要があります。 PYTHONPATHには現在の作業ディレクトリが含まれているため、実行時に最初のスクリプトで動作します。しかし、サブプロセスを呼び出すと、cwdは異なります。したがって、my_projectへのパスをPYTHONPATHに追加し、env引数を明示的に指定してsubprocess.call()にする必要があります。

しかし、この方法でPythonコードを実行するのは難しいです。これを防ぐ特別な要件がない限り、別のプロセスでPythonコードを実行する代わりにmultiprocessingパッケージを使用することをお勧めします。

+0

pythonpathが定義されていない場合、どうすればいいですか?現在のパスを追加してpythonpathを定義し、envに渡しますか? – Francesc

+0

'subprocess.call(...、env = os.environ)'という呼び出しプロセスの環境を単に渡すことができるはずです。 –

関連する問題