diff options
Diffstat (limited to 'Lib/commands.py')
-rw-r--r-- | Lib/commands.py | 41 |
1 files changed, 9 insertions, 32 deletions
diff --git a/Lib/commands.py b/Lib/commands.py index dc46740..4d16eef 100644 --- a/Lib/commands.py +++ b/Lib/commands.py @@ -2,11 +2,6 @@ # # Various tools for executing commands and looking at their output and status. -import rand -import posix -import stat -import path - # Get 'ls -l' status for an object into a string # @@ -16,8 +11,7 @@ def getstatus(file): # Get the output from a shell command into a string. # The exit status is ignored; a trailing newline is stripped. -# Assume the command will work with ' >tempfile 2>&1' appended. -# XXX This should use posix.popen() instead, should it exist. +# Assume the command will work with '{ ... ; } 2>&1' around it.. # def getoutput(cmd): return getstatusoutput(cmd)[1] @@ -27,42 +21,25 @@ def getoutput(cmd): # Returns a pair (sts, output) # def getstatusoutput(cmd): - tmp = '/usr/tmp/wdiff' + `rand.rand()` - sts = -1 - try: - sts = posix.system(cmd + ' >' + tmp + ' 2>&1') - text = readfile(tmp) - finally: - altsts = posix.system('rm -f ' + tmp) + import posix + pipe = posix.popen('{ ' + cmd + '; } 2>&1', 'r') + text = pipe.read() + sts = pipe.close() + if sts = None: sts = 0 if text[-1:] = '\n': text = text[:-1] return sts, text -# Return a string containing a file's contents. -# -def readfile(fn): - st = posix.stat(fn) - size = st[stat.ST_SIZE] - if not size: return '' - try: - fp = open(fn, 'r') - except: - raise posix.error, 'readfile(' + fn + '): open failed' - try: - return fp.read(size) - except: - raise posix.error, 'readfile(' + fn + '): read failed' - - # Make command argument from directory and pathname (prefix space, add quotes). # def mk2arg(head, x): - return mkarg(path.cat(head, x)) + import path + return mkarg(path.join(head, x)) # Make a shell command argument from a string. # Two strategies: enclose in single quotes if it contains none; -# otherwis, enclose in double quotes and prefix quotable characters +# otherwise, enclose in double quotes and prefix quotable characters # with backslash. # def mkarg(x): |