ich habe ein Problem bei der Nutzung von watchdog in Verbindung mit einem daemon Prozess.
Ich habe ein Skript das sobald eine Datei in einem Ordner erstellt wird, diese Datei in einen neu erstellten Ordner verschiebt und dann ausdruckt. Dabei ist das erstellen des Ordners, verschieben, drucken usw. in einem zuvor erstellten Kindprozess. Bis hierhin funktioniert alles einwandfrei. Wenn ich aber noch die Daemon Klasse http://web.archive.org/web/201310171304 ... in_python/ hinzufüge, passiert außer das der Prozess erstellt wird nichts weiter.
Hier mal der Codeausschnitt:
Code: Alles auswählen
#!/usr/bin/python
import time
import datetime
import os
import shutil
import ConfigParser
import signal
import sys
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from daemon import Daemon
config = ConfigParser.RawConfigParser()
configFilePath = 'print.ini'
config.read(configFilePath)
def child():
#print('\nA new child ', os.getpid())
tmp = datetime.datetime.now().strftime("%d.%m.%Y_%H:%M:%S")
path = config.get('Path', 'Pickinglist')
directory = './' + tmp + '/'
move = 'mv *.pdf ' + path + tmp
try:
if not os.path.exists(directory):
os.makedirs(directory)
except OSError:
print ('Error: Creating directory. ' + directory)
os.system(move)
os.chdir(directory)
filename = os.listdir(path + tmp)
order,printer = filename[0].split('_')
printer = printer.replace('.pdf', '')
while True:
try:
os.system('lp -d '+ printer + ' -o fit-to-page *.*')
except OSError:
print ('Error: Printing failed')
continue
break
time.sleep(20)
os.chdir('..')
shutil.rmtree(directory)
os._exit(0)
def doit():
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path='.', recursive=False)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
class MyDaemon(Daemon):
def run(self):
doit()
class MyHandler(FileSystemEventHandler):
def on_created(self, event):
# print "Got it!"
if not event.is_directory:
newpid = os.fork()
if newpid == 0:
child()
if __name__ == "__main__":
daemon = MyDaemon('daemon-print.pid')
if len(sys.argv) == 2:
if 'start' == sys.argv[1]:
daemon.start()
elif 'stop' == sys.argv[1]:
daemon.stop()
elif 'restart' == sys.argv[1]:
daemon.restart()
elif 'status' == sys.argv[1]:
daemon.status()
elif 'print' == sys.argv[1]:
child()
else:
print "Unknown command"
sys.exit(2)
sys.exit(0)
else:
print "usage: %s start|stop|restart" % sys.argv[0]
sys.exit(2)