2017-10-04 5 views
0

파이썬 하위 프로세스를 사용하여 프로젝트를 가져올 수있는 스크립트를 실행하려고합니다. 다른 프로세스에서 실행될 때, 필자는 프로젝트를 가져올 때만 전형적인 모듈을 가지고 있습니다. 내 모듈을 어떻게 가져올 수 있습니까?파이썬 하위 프로세스 다른 모듈을 가져올 수 없습니다.

예 : 첫 번째 스크립트에서

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를 실행하지 마십시오. '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에 있어야합니다. PYTHONPATH는 현재 작업 디렉토리를 포함하기 때문에 실행시 첫 번째 스크립트에서 작동합니다. 그러나 하위 프로세스를 호출하면 cwd가 달라집니다. 따라서 my_project의 경로를 PYTHONPATH에 추가하고 env 인수를 명시 적으로 PYTHONPATH로 지정하여 subprocess.call()으로 지정해야합니다.

그러나이 방법으로 파이썬 코드를 실행하는 것은 어색합니다. 이 문제를 방지 할 수있는 특정 요구 사항이 없으면 별도의 프로세스에서 Python 코드를 실행하는 대신 multiprocessing 패키지를 사용하는 것이 좋습니다.

+0

pythonpath가 정의되지 않은 경우 어떻게 할 수 있습니까? 현재 경로를 추가하여 pythonpath를 정의하고이를 env에 전달합니까? – Francesc

+0

'subprocess.call (..., env = os.environ)'호출 프로세스의 환경을 전달하기 위해서이 작업을 수행 할 수 있어야합니다. –

관련 문제