2012-01-20 3 views
12

저는 두 번째를 호출해야하는 한 쌍의 파이썬 프로그램을 사용하고 있습니다.데몬으로 파이썬 서브 프로세스를 호출하고 종료하십시오.

그러나 첫 번째 프로그램이 두 번째 프로그램을 데몬 (또는 백그라운드 프로세스에서 실행)으로 만든 다음 두 번째 프로그램이 끝날 때까지 기다리지 않고 끝내야합니다.

파이썬에서는 가능합니까?

내가 os.fork, 서브 프로세스 모듈에서 찾아 봤는데,하지만이를 달성하기 위해 올바른 방법으로 매우 혼란 스러워요 ...

답변

10

당신은 이것에 대한 subprocess.Popen 사용할 수 있습니다

import subprocess 

cmd = ['/usr/bin/python', '/path/to/my/second/pythonscript.py'] 
subprocess.Popen(cmd) 

stdoutstderr을 어딘가로 리디렉션 할 수 있습니다. stdout=<file_obj>Popen 생성자에 전달하여이 작업을 수행 할 수 있습니다.

+1

따라서 'daemon_process'는 '/ usr/bin/pyton /path/to/my/second/pythonscript.py'와 동일해야합니다. –

+0

@JavierNovoaC. 'Popen'은 논쟁의 목록을 가지고 있습니다. 내가 명확하게 대답을 수정합니다. 덕분에 –

+0

!) –

3

"데몬"은 "백그라운드 프로세스"보다 더 구체적인 정의를 전달합니다. 기본적으로 Popen은 하위 프로세스를 실행하고 프로그램을 다시 제어하여 실행을 계속합니다. 그러나 이것은 신호 처리 (특히 백그라운드 프로세스가 끝나기 전에 사용자가 쉘을 종료하면 SIGHUP) 또는 Popen을 호출 할 때 stdin, stderr, stdout 및 기타 파일 설명자와의 연결을 끊는 것에 대해서는 아무 것도 말하지 않습니다. 정말로 데몬을 원한다면 python-daemon 모듈 (PEP 3143 구현)을 사용해야합니다. 이것은 생각하고 싶지 않은 총체적인 부분을 처리합니다.

관련 문제