Python Forum
How to merge 2 parts of script
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to merge 2 parts of script
#1


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!
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Pyautogui script runs fine if split into two parts together it does not Bmart6969 1 2,544 Oct-07-2019, 10:53 PM
Last Post: Bmart6969

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020