2012-03-29 7 views
0

das Abendessen Klasse ich benutze, ist http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/, ist mein Code unten:Warum Daemon-Ausgabe kann nur gehen/Tmp Dir?

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() 

Wenn ich DebugDaemon.py laufen, kann die /tmp/DebugDaemon.pid erstellt werden.

Die Datei ouput.txt kann jedoch nicht erstellt werden, warum?

Wenn ich es direkt anrufe (dh: Nein mit dem Daemon-Code) gut funktionieren.

+0

Da läuft eigentlich nichts. Alles, was Sie tun, ist eine Variable namens cmd, und dann zu schlafen. – obmarg

+0

cmd ist eine lokale Variable, Sie müssen irgendeine Funktion aufrufen, um irgendetwas zu tun und vielleicht cmd auf self.cmd setzen, damit Ihre Klasse von cmd weiß. –

+0

Funktioniert Ihr Aufruf für den Konstruktor "MyDaemon"? Oder haben Sie den Konstruktorcode weggelassen? – Taymon

Antwort

1

cmd ist eine lokale Variable. Deine Zuweisung dazu bewirkt eigentlich nichts, da kein Code es benutzt.

Das Modul subprocess ermöglicht es Ihnen, andere Programme innerhalb von Python aufzurufen. Ich weiß nicht, wie es mit Dämonen interagiert.

+0

Entschuldigung, ich habe einen Fehler gemacht, als ich diesen Qus eingegeben habe – xunzhang

1

Daemon erscheint zu zu /. Ich wette, Ihr Prozess hat keine Schreibrechte für /.

Ihr Daemon muss chdir() in das Verzeichnis, in dem sich test.txt befindet (und für den der Prozess Schreibberechtigungen hat). Alternativ können Sie vollständige Pfade überall:

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

die

cat test.txt > output.txt 

ausgeführt in/weil die Super-Klasse tut

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

die pid-Datei geschrieben werden kann, weil jeder schreiben kann to/tmp -/ist nicht für jeden lesbar.

Verwandte Themen