2013-05-09 4 views
0

예 파이썬 부모 파일 :스레드로 파이썬 파일을 실행하는 방법?

class myClass(wx.Frame): 
    def __init__(self): 
     print "Prepare execute" 
     self.MyThread = Thread.RunBackground('./child.py' , ('--username' , 'root')); 
     print "Executing... Do you like this app?" 
     self.MyThread.start(); 
    def onClose(self , evt): 
     self.MyThread.close() 
     self.exit(); 

app = MyClass() 

파이썬 배경에 스크립트를 실행하는 방법을 알 필요가있다. 두 번째 프로세스가 작동하더라도 주 윈도우를 사용할 수 있다는 아이디어가 있습니다.

+1

그럼 ... 뭐가 궁금한가요? 너 무슨 문제있어? –

+0

필자는 Python으로 백그라운드에서 스크립트를 실행하는 방법을 알아야합니다. 두 번째 프로세스가 작동하더라도 주 윈도우를 사용할 수 있다는 아이디어가 있습니다. –

답변

1

나는 여기서 스레드를 전혀 신경 쓰지 않고 "스크립트를"두 번째 프로세스로 실행하기를 원합니다.

쉽습니다. 스크립트를 실행하는 것은 다른 작업을 실행하는 것과 같습니다. subprocess 모듈을 사용합니다. 스크립트는 완전히 별개의 파이썬 인터프리터 인스턴스 내에서 실행되기 때문에 완전히 분리 된 프로세스에서 "두 번째 프로세스가 작동하더라도"메인 윈도우를 사용할 수 있습니다. 예를 들어

:

class myClass(wx.Frame): 
    def __init__(self): 
     print "Executing... Do you like this app?" 
     self.child = subprocess.Popen([sys.executable, './child.py', '--username', 'root']) 
    def onClose(self , evt): 
     self.child.wait() 
     self.exit(); 

여기에 유일한 트릭은 첫 번째 인수로 전달하는 것입니다. child.py이 부모와 동일한 Python 복사본에 의해 실행되도록하려면 sys.executable을 사용하십시오. 부모가 다른 것을 사용하고 있어도 기본 파이썬으로 실행되도록하려면 python을 사용하십시오. 특정 경로를 사용하려면 절대 경로를 사용하십시오. 셸 (또는 Windows에서 파일 관리자)이 #! 행을 기반으로 계산되도록하려면 shell=True을 사용하고 첫 번째 인수로 ./child.py을 전달하십시오. 등등.

관련 문제