Python Forum

Full Version: How to merge 2 parts of script
You're currently viewing a stripped down version of our content. View the full version with proper formatting.


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!