From 599401a543d7346e2546dcbfc67ee41d3d34f918 Mon Sep 17 00:00:00 2001 From: wirawan Date: Mon, 8 Feb 2010 19:57:35 +0000 Subject: [PATCH] * Include *all* coreutils as the repertoire of the shell_tool commands. * Added sorted_glob to return sorted list of globbed files. Needed for this script to run on older python 2.3-based systems. --- shell_tools.py | 71 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 68 insertions(+), 3 deletions(-) diff --git a/shell_tools.py b/shell_tools.py index 3177978..293a141 100644 --- a/shell_tools.py +++ b/shell_tools.py @@ -1,4 +1,4 @@ -# $Id: shell_tools.py,v 1.4 2010-01-20 21:27:41 wirawan Exp $ +# $Id: shell_tools.py,v 1.5 2010-02-08 19:57:35 wirawan Exp $ # # wpylib.shell_tools # Created: 20100106 @@ -8,6 +8,7 @@ # scripts. # +import glob import os import os.path import sys @@ -26,7 +27,7 @@ def mcd(subdir): os.chdir(subdir) -def provide_file(dest, src): +def provide_link(dest, src): """Checks if file `dest' exists. If it does not, provide for it by means of a softlink from `src'.""" if not os.path.exists(dest): @@ -34,6 +35,41 @@ def provide_file(dest, src): os.symlink(src, dest.rstrip("/")) +# Globbing utilities: + +def sorted_glob(pathname):#, cmp=None, key=None, reverse=None): + """Returns a sorted list of file names matching glob pattern `pathname'. + Added here to accomodate older python that do not have sorted() function.""" + rslt = glob.glob(pathname) + rslt.sort() #cmp=cmp, key=key, reverse=reverse) + return rslt + +# Environment variable utilities: + +def env_push(name, new_value): + """Temporarily modifies the value of an environment variable; saving the + original one in the function return value. + The original value can be restored to the environment variable by calling + env_pop. + + Example: + + oldpath = push_env('TOOL_HELPER', '/usr/bin/less') + execvp(os.P_WAIT, 'some_tool', ('some_tool', 'some_arg')) + pop_env('TOOL_HELPER', oldpath) + """ + old_value = os.environ.get(name, None) + os.environ[name] = new_value + return old_value + +def env_pop(name, old_value): + """Restores the original value of an environment variable that was modified + temporarily by env_push.""" + if old_value == None: + del os.environ[name] + else: + os.environ[name] = old_value + # Low-level utilities: def errchk(cmd, args, retcode): @@ -111,9 +147,38 @@ else: # coreutils + +coreutils = """ +base64 basename +cat chcon chgrp chmod chown cksum comm cp csplit cut +date dd df dir dircolors dirname du +echo env expand expr +factor false fmt fold +groups +head hostid +id install +join +link +ln logname ls +md5sum mkdir mkfifo mknod mv +nice nl nohup +od +paste pathchk pinky pr printenv printf ptx pwd +readlink rm rmdir runcon +seq sha1sum sha224sum sha256sum sha384sum sha512sum shred shuf sleep sort split stat stty sum sync +tac tail tee test touch touch tr true tsort tty +uname unexpand uniq unlink users +vdir +wc who whoami +yes +""".split() + # and other common utilities -CMD = ['cat', 'cp', 'head', 'grep', 'less', 'ls', 'mkdir', 'mv', 'rm', 'tail'] +CMD = coreutils +CMD += [ 'grep', 'less' ] +CMD += [ 'sh', 'bash' ] +CMD += [ 'gawk', 'sed', ] CMD_NAME = {} for n in CMD: CMD_NAME[n] = n