2012-03-29 6 views
0

내가 사용하는 저녁 식사 클래스 http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/입니다, 내 코드는 다음과 같습니다 : 나는 DebugDaemon.py을 실행하면왜 데몬의 출력은/tmp 디렉토리로 바로 이동할 수 있습니까?

import os 
import sys, time 
from daemon import Daemon 
class MyDaemon(Daemon): 
    def run(self): 
     while True: 
      cmd='cat test.txt > output.txt' 
      os.system(cmd) 
      time.sleep(6000) 
if __name__ == "__main__":  
    daemon = MyDaemon('/tmp/DebugDaemon.pid') 
    daemon.start() 

는 /tmp/DebugDaemon.pid 만들 수 있습니다.

그러나 ouput.txt 파일을 만들 수없는 이유는 무엇입니까?

직접 호출하면 (즉, 데몬 코드를 사용하지 않음) 잘 작동합니다.

+0

실제로 아무 것도 실행하지 않습니다. cmd라는 변수를 설정 한 다음 자고있는 것뿐입니다. – obmarg

+0

cmd는 지역 변수이므로, 어떤 일을하기 위해 어떤 함수를 호출해야하고 cmd를 self.cmd로 설정하여 클래스가 cmd를 알 수 있도록해야합니다. –

+0

'MyDaemon' 생성자에 대한 호출이 작동합니까? 또는 생성자 코드를 생략 했습니까? – Taymon

답변

1

cmd은 로컬 변수입니다. 코드를 사용하지 않으므로 코드에 대한 할당은 실제로 아무 것도하지 않습니다.

subprocess 모듈을 사용하면 Python 내에서 다른 프로그램을 호출 할 수 있습니다. 내가 데몬과 어떻게 상호 작용하는지 모르겠다.

+0

죄송합니다.이 qus를 입력 할 때 실수를했습니다. – xunzhang

1

Daemonchdir()에서 /으로 나타납니다. 귀하의 프로세스에 /에 대한 쓰기 권한이 없습니다.

데몬은 test.txt이있는 디렉토리 (프로세스에 쓰기 권한이있는 디렉토리)에 chdir()이 필요합니다. 또한, 모든 곳에서 전체 경로를 사용

cmd = 'cat /tmp/test.txt > /tmp/output.txt' 
0

cat test.txt > output.txt 

이 실행됩니다/슈퍼 클래스가

# decouple from parent environment 
os.chdir("/") 

을 수행하기 때문에 PID 파일이 기록 될 수 있습니다, 모두가 쓸 수 있기 때문에 ~/tmp - /는 모든 사용자에게 쓸 수 없습니다.