많은 다른 주제의 웹에서 많은 연구를 한 후 필자의 문제에 답하는 해결책을 찾지 못했습니다.Python 외부 프로젝트 스크립트 실행
다른 프로젝트의 파이썬 스크립트를 처리 할 수있는 도구 (그래픽 인터페이스 포함)를 개발 중입니다. 의존성에 대한 문제가 없으므로 사용자에게 프로젝트 디렉토리와 처리 할 스크립트를 지정하도록 요청합니다.
이 도구를 개발하기 위해 IDE에서 프로젝트 "benchmark_tool"을 GUI에 통합하고 프로젝트 "test_project"를 사용하여 다양한 테스트 스크립트를 그룹화했습니다. 분명히 최종 목표는 컴파일 할 도구이므로 "benchmark_tool"프로젝트가 IDE에서 사라집니다.
benchmark_tool (python project)
__init__.py
main.py
test_project (python project)
__init__.py
module1
__init__.py
test_script.py
module2
__init__.py
imports.py
그것이 작동하는 방법 : :이 main.py는 test_script.py이라 하리라 여기
는 IDE 아키텍처입니다. test_script.py는 스크립트를 처음 만들 때 imports.py를 호출합니다.
UPDATE
나는 내 주요 코드에서 일부 수정을 시도 :이 오류가 발생했습니다
import sys
import subprocess
subprocess.check_call([sys.executable, '-m', 'test_project.module1.test_script'], cwd='D:/project/python')
Traceback(most recent call last):
File "C:/Python31/lib/runpy.py", line 110, in run module as main
mod_name, loader, code, fname = _get_module_detail(mod_name)
File "C:/Python31/lib/runpy.py", line 91, in get module details
code = loader.get_code(mod_name)
File "C:/Python31/lib/pkgutil.py", line 272, in get code
self.code = compile(source, self.filename, 'exec')
File "D:/project/python/test_project/module1/test_script.py", line 474
SyntaxError: invalid syntax
Traceback (most recent call last):
File "D:/other_project/benchmark_tool/main.py", line 187, in read
subprocess.check_call([sys.executable, '-m', 'module1.test_script.py'], cwd='D:/project/python/test_project')
File "C:/Python31/lib/subprocess.py", line 446, in check call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['C:/Python31/python.exe', '-m', 'module1.test_script.py']' returned non-zero exit status 1
주 이 subprocess.Popen(['python','D:/project/python/test_project/module1/test_script.py])
두 방법의 주요 차이점은 무엇입니까? test_scripts.py에 인수를 전달해야합니다. python 스크립트 (입력 및 출력 데이터가 교환 됨)와 통신하는 데 가장 적합한 인수는 무엇입니까? 사전
가 : 당신이 module1.test_script'와'모듈 1/test_script'이해 마십시오 .py'는 다른 문자열입니까? 'PYTHONPATH'을 수정하지 마십시오. 내 대답에서 pythonpath를 어디에서 수정하는지 어디서 알 수 있습니까? 내 대답을주의 깊게 읽으십시오 - 다른 코드를 추가하지 마십시오. 명확하게하기 위해 질문을 업데이트하고 module1과 module2가 최상위 Python 모듈인지 또는'test_project'의 하위 모듈인지 (즉,'test_project'가 Python 모듈인지 또는 단지 디렉토리인지)를 지정하십시오. 대답에 따라, 두 경우를 다루는 내 대답의 해당 코드 예제를 사용하십시오. – jfs
죄송합니다. 저는'module1.test_script'를 넣었지만 제대로 작성하지 않았습니다. (필자가 작성해야하는 코드를 복사/붙여 넣기 할 수 없습니다). test_project는 디렉토리가 아닌 파이썬 모듈이며, module1과 module2는 test_script의 서브 모듈입니다. 'PYTHONPATH' 명령을 제거했지만 같은 오류가 발생했습니다. –
왜 작성해야합니까? 명령 줄에서 복사하여 붙여 넣는 방법을 모르는 경우 특정 환경에 대한 별도의 질문을하십시오 (유용합니다). 정확한 명령을주지 않으면 내가 도울 수 없습니다. 다시 말하지만,''module1.test_script.py ''는 'module1.test_script'와 다릅니다. 'test_project'가 파이썬 모듈이라면, 제 대답의 두 번째 변형을 사용하십시오. 즉,'subprocess.check_call ([sys.executable, '-m', 'test_project.module1.test_script'], cwd = r'D : \ project \ 파이썬 ')'. 관련 없음 : Windows 경로에 원시 문자열 리터럴을 사용할 수 있습니다 ('r'접두사 사용). – jfs