Difference between revisions of "Python:Template"
Jump to navigation
Jump to search
Line 41: | Line 41: | ||
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | ||
− | logfile2name = logfile2name.replace('timestamp',timestamp) | + | logfile2name = logfile2name.replace('timestamp', timestamp) |
counters = defaultdict(int) | counters = defaultdict(int) | ||
Line 50: | Line 50: | ||
logging.info("This is in the logfile with generated name") | logging.info("This is in the logfile with generated name") | ||
openfile(filespec) | openfile(filespec) | ||
− | + | for counter, value in counters.items(): | |
+ | print('{:10s} {:5d}'.format(counter, value) | ||
return | return | ||
Line 69: | Line 70: | ||
def openlog (logfilename = ''): | def openlog (logfilename = ''): | ||
if logfilename == '': | if logfilename == '': | ||
− | logfilename = __file__.replace('/bin/','/log/') | + | logfilename = __file__.replace('/bin/', '/log/') |
logfilename += '_'+timestamp+'.log' | logfilename += '_'+timestamp+'.log' | ||
if testing: | if testing: | ||
logfilename = logfilename+'_testing' | logfilename = logfilename+'_testing' | ||
− | logging.basicConfig(filename=logfilename,level=logging.DEBUG,format='%(asctime)s %(levelname)7s %(message)s') | + | logging.basicConfig(filename=logfilename, level=logging.DEBUG,format='%(asctime)s %(levelname)7s %(message)s') |
logging.info(logfilename+" open.") | logging.info(logfilename+" open.") | ||
return(logfilename) | return(logfilename) | ||
− | def get_config(scriptname = '' ,rcfile = None): | + | def get_config(scriptname = '' , rcfile = None): |
'''Read configuration from a given rcfile or from a configuration file in ./, ../etc, ./etc or /etc ''' | '''Read configuration from a given rcfile or from a configuration file in ./, ../etc, ./etc or /etc ''' | ||
import os | import os | ||
Line 86: | Line 87: | ||
pass | pass | ||
else: | else: | ||
− | rcfile = re.sub('\.py$','.rc',scriptname) | + | rcfile = re.sub('\.py$', '.rc', scriptname) |
if os.path.isfile(rcfile): | if os.path.isfile(rcfile): | ||
pass | pass | ||
else: | else: | ||
− | rcfile = rcfile.replace('/bin/','/etc/') | + | rcfile = rcfile.replace('/bin/', '/etc/') |
if os.path.isfile(rcfile): | if os.path.isfile(rcfile): | ||
pass | pass | ||
Line 104: | Line 105: | ||
with open ( rcfile, "r") as file: | with open ( rcfile, "r") as file: | ||
for line in file: | for line in file: | ||
− | line = re.sub('\#.*$','',line).strip() | + | line = re.sub('\#.*$', '', line).strip() |
− | s = re.search('\s*=+\s*',line) | + | s = re.search('\s*=+\s*', line) |
if s: | if s: | ||
parameter = line[:s.start()] | parameter = line[:s.start()] |
Latest revision as of 11:44, 29 December 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'
version = 'v02, 20211229, Last update (counters added)'
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)
counters = defaultdict(int)
def main():
config = get_config(scriptname = __file__)
logfilename = openlog()
openlog(<apath>)
logging.info("This is in the logfile with generated name")
openfile(filespec)
for counter, value in counters.items():
print('{:10s} {:5d}'.format(counter, value)
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 = __file__.replace('/bin/', '/log/')
logfilename += '_'+timestamp+'.log'
if testing:
logfilename = logfilename+'_testing'
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