import sys, time from datetime import datetime from daemon3x import daemon3x from configparser import SafeConfigParser import smaem #read configuration parser = SafeConfigParser() parser.read('/etc/smaemd/config') smaemserials=parser.get('SMA-EM', 'serials') serials=smaemserials.split(' ') smavalues=parser.get('SMA-EM', 'values') values=smavalues.split(' ') pidfile=parser.get('DAEMON', 'pidfile') class MyDaemon(daemon3x): def run(self): emparts = {} while True: emparts=smaem.readem() for serial in serials: #print(serial) #print(emparts['serial']) if serial==format(emparts['serial']): #print("match") for value in values: file = open("/run/shm/em-"+format(serial)+"-"+format(value),"a") tijd = datetime.now().strftime("%Y-%m-%d %H:%M:%S"); waarde = emparts[value] string = "{} - {:.4f} \n".format(tijd, waarde) file.write(string) file.close() if __name__ == "__main__": daemon = MyDaemon(pidfile) 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() else: print ("Unknown command") sys.exit(2) sys.exit(0) else: print ("usage: %s start|stop|restart" % sys.argv[0]) print (pidfile) sys.exit(2)this script writes my data each second
I would like to adapt the above with something like this to create a file each day:
import os import time class RotatingFileOpener(): def __init__(self, path, mode='a', prepend="", append=""): if not os.path.isdir(path): raise FileNotFoundError("Can't open directory '{}' for data output.".format(path)) self._path = path self._prepend = prepend self._append = append self._mode = mode self._day = time.localtime().tm_mday def __enter__(self): self._filename = self._format_filename() self._file = open(self._filename, self._mode) return self def __exit__(self, *args): return getattr(self._file, '__exit__')(*args) def _day_changed(self): return self._day != time.localtime().tm_mday def _format_filename(self): return os.path.join(self._path, "{}{}{}".format(self._prepend, time.strftime("%Y%m%d"), self._append)) def write(self, *args): if self._day_changed(): self._file.close() self._file = open(self._format_filename()) return getattr(self._file, 'write')(*args) def __getattr__(self, attr): return getattr(self._file, attr) def __iter__(self): return iter(self._file) with RotateFileOpener('/home/pi/', prepend='data-', append='.txt') as logger: while True: log = get_gpx_data() logger.write(log)which will write into /home/pi/:
/home/pi/data-20171218.txt
/home/pi/data-20171219.txt
/home/pi/data-20171220.txt
I just have no clue how to adapt this to my initial script as it already consists of a class (daemon)...
thanks for any kind of advice!