Difference between revisions of "Python:Template"

From wiki
Jump to navigation Jump to search
m
Line 26: Line 26:
  
 
# END USER CONFIGURABLE ITEMS, DO NOT CHANGE ANYTHING BELOW THIS LINE
 
# END USER CONFIGURABLE ITEMS, DO NOT CHANGE ANYTHING BELOW THIS LINE
 +
 +
 +
if testing:
 +
    print('Running {} in testing mode'.format(__file))
  
 
import os
 
import os
Line 35: Line 39:
 
from datetime import datetime
 
from datetime import datetime
 
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
 
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
 
if testing:
 
    print('Running in testing mode')
 
  
 
logfile2name = logfile2name.replace('timestamp',timestamp)
 
logfile2name = logfile2name.replace('timestamp',timestamp)

Revision as of 13:30, 10 April 2021

Template for Python programs. Creating logfiles, standard modules to load, opening files, user configuration.

Code for mailing is on this wiki too.

ToDO:

  • Parsing commandline options
#!/usr/bin/env python

def usage():
    print ("Usage: "+__file__)
    print("Template for python programs")
    version = 'R1A, 20181010, Initial release'
    print("Version: "+version)
    sys.exit(1)


# USER CONFIGURABLE ITEMS (use this or a config file (see getconfig function)

testing = 0
warning = 'If you need to modify these variables anywhere else you have to declare it global there'
filespec =  '*.*'
logfile2name = '<apath>_timestamp.txt'

# END USER CONFIGURABLE ITEMS, DO NOT CHANGE ANYTHING BELOW THIS LINE


if testing:
    print('Running {} in testing mode'.format(__file))

import os
import sys
import re
import glob
import logging
from collections import defaultdict
from datetime import datetime
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")

logfile2name = logfile2name.replace('timestamp',timestamp)

config = get_config(scriptname = __file__)

def main():
    logfilename = openlog()
    openlog(<apath>)
    logging.info("This is in the logfile with generated name")
    openfile(filespec)

    return


def openfile(filespec):
    filelist = glob.glob(filespec)
    for filename in filelist:
        if os.path.isfile(filename):
            with open (filename,"r") as file:
                for line in file:
                    #remove newline characters
                    line.rstrip('\r\n')
                    <codeblock>
    return


def openlog (logfilename = ''):
    if logfilename == '':
        logfilename = re.sub('/bin/','/log/',__file__)
        logfilename += '_'+timestamp+'.log'
    logging.basicConfig(filename=logfilename,level=logging.DEBUG,format='%(asctime)s %(levelname)7s %(message)s')
    logging.info(logfilename+" open.")
    return(logfilename)


def get_config(scriptname = '' ,rcfile = None):
    '''Read configuration from a given rcfile or from a configuration file in ./, ../etc, ./etc or /etc '''
    import os
    import re    
    config = {}
    if rcfile:
        pass
    else:
        rcfile = re.sub('\.py$','.rc',scriptname)
        if os.path.isfile(rcfile):
            pass
        else:
            rcfile = rcfile.replace('/bin/','/etc/')
            if os.path.isfile(rcfile):
                pass
            else:
                scriptpath = os.path.dirname(scriptname)
                rcfilename = os.path.basename(rcfile)
                rcfile = scriptpath+'/etc/'+rcfilename
                if os.path.isfile(rcfile):
                    pass
                else:
                    rcfile = '/etc/'+rcfilename
    if os.path.isfile(rcfile):
        with open ( rcfile, "r") as file:
            for line in file:
                line = re.sub('\#.*$','',line).strip()
                s = re.search('\s*=+\s*',line)
                if s:
                    parameter = line[:s.start()]
                    value = line[s.end():]
                    if value[0] == '[' and value[-1] == ']':
                        tmplist = list(value[1:-1].split(','))
                        value = []
                        for val in tmplist:
                            val = val.strip(' \'\"')
                            value.append(val)
                    config[parameter] = value
    else:
        print("No configuration file found")

    return config


main()

Logging suggestion to test:

def logfunc(logFile):  
    logging.basicConfig(format = '%(asctime)s %(filename)25s %(levelname)6s : %(message)s' , level=logging.INFO)  
    log = logging.getLogger()  
    fh = logging.FileHandler(logFile)  
    formatter = logging.Formatter('%(asctime)s %(filename)25s %(levelname)6s : %(message)s')  
    fh.setFormatter(formatter)  
    log.addHandler(fh)  
    return log