cmdhelper is a Python utility for writing command line scripts with a consistent style, default set of command line options, and common approach to logging.
cmdhelper provides:
- Parsing of command line options using either argparse or optparse.
- Setup of logging with the possibility to copy stdout or stderr into the logfile.
- Possibility to e-mail log messages upon completion with an option to send the e-mail only if a log message with a severity at or above a trigger level was recorded.
- Definition of a set of default options, including options to set verbosity and logging options.
- A utility function to run external commands whose output can be logged and parsed for error messages.
- A utility function for asking the user to confirm actions.
A script that processes different commands with optional command arguments might include:
from cmdhelper import *
cmdHelper = CmdHelper('argparse', __version__)
cmdHelper.add_argument('cmd', help='command')
cmdHelper.add_argument('args', help='command arguments', nargs='*')
cmdHelper.add_option('-x', '--example', dest='value', default=None, help='sample option')
options = cmdHelper.parse()
try:
# processing goes here
pass
except Exception as e:
handleError(e,options.debug)
Running the above code with –help will produce the following output:
usage: example.py [-h] [--version] [-i] [-v] [--debug] [--noscreen]
[--logfile LOGFILE] [--loglevel LOGLEVEL]
[--logseparator LOGSEPARATOR]
[--logtimestampfmt LOGTIMESTAMPFMT] [--emailto EMAILTO]
[--emailsubject EMAILSUBJECT] [--emaillevel EMAILLEVEL]
[--emailtriglevel EMAILTRIGLEVEL] [-x VALUE]
cmd [args [args ...]]
positional arguments:
cmd command
args command arguments
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
-i, --interactive enter interactive Python at completion
-v, --verbose verbose output
--debug debugging output
--noscreen disable logging output to screen
--logfile LOGFILE write logging information to this file (default: )
--loglevel LOGLEVEL logging level for logfile (default: INFO or DEBUG)
--logseparator LOGSEPARATOR
message to write to logfile at beginning of new log
--logtimestampfmt LOGTIMESTAMPFMT
timestamp format string (in logging formatter format)
--emailto EMAILTO email address receiving any log messages
--emailsubject EMAILSUBJECT
subject for log e-mails
--emaillevel EMAILLEVEL
logging level for e-mails (default: WARNING)
--emailtriglevel EMAILTRIGLEVEL
trigger level for sending e-mails (default: None)
-x VALUE, --example VALUE
sample option