Python:Template
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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