2015-01-30 2 views
1

Windows에서 Python 3.4.2를 사용하고 있습니다. script1.py에서 나는 다음과 같이하고있다.대기중인 Python subprocess.popen()

myProc = subprocess.Popen([sys.executable, "script2.py", "argument"]) 
myProc.communicate() 

작동하고 script2.py를 호출한다. 문제는 script2.py에는 무한 루프 (있어야 함)가 있으며 script1.py는 script2.py가 완료 될 때까지 기다리는 중입니다. script2.py를 호출하여 script2.py를 호출하고 프로세스가 완료 될 때까지 기다리지 않으려면 어떻게해야합니까?

+0

이 정보가 도움이됩니까? http://stackoverflow.com/questions/13243807/popen-waiting-for-child-process-even-when-the-immediate-child-has-terminated – nekomatic

+0

관련 없음 : 더 유연한 대안으로 다음과 같이 스크립트를 가져올 수 있습니다. 파이썬 모듈 대신에 (if __name__ == "__ main __"'을 사용하여 임포트시 코드 실행을 피하십시오.) 함수를 직접 호출하거나 필요할 경우'threading','multiprocessing','concurrent.futures'를 사용하십시오. – jfs

답변

4

기다리지 않으려면 myProc.communicate()으로 전화하지 마십시오. subprocess.Popen이 프로세스를 시작합니다.

+0

나는 그것을 믿을 수 없다. 어리석은 질문에 미안하지만, 답장을 보내 주셔서 감사합니다. – jul

0

다른 창에서 스크립트를 호출하십시오.

myProc = subprocess.Popen(["start", sys.executable, "script2.py", "argument"]) 
myProc.communicate() 

start

는 현재이 과정을 계속 할 수 있도록 별도의 프로그램을 실행하는 윈도우 쉘 기능입니다. Windows OS에 액세스 할 수 없어서 테스트하지는 않았지만 필요한만큼의 Linux ( nohup)가 작동합니다.

script2.py에서 발생하는 문제를 미세하게 제어해야하는 경우 multiprocessing 모듈 here을 참조하십시오.

관련 문제