1"""Execute shell commands via os.popen() and return status, output. 2 3Interface summary: 4 5 import commands 6 7 outtext = commands.getoutput(cmd) 8 (exitstatus, outtext) = commands.getstatusoutput(cmd) 9 outtext = commands.getstatus(file) # returns output of "ls -ld file" 10 11A trailing newline is removed from the output string. 12 13Encapsulates the basic operation: 14 15 pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r') 16 text = pipe.read() 17 sts = pipe.close() 18 19 [Note: it would be nice to add functions to interpret the exit status.] 20""" 21from warnings import warnpy3k 22warnpy3k("the commands module has been removed in Python 3.0; " 23 "use the subprocess module instead", stacklevel=2) 24del warnpy3k 25 26__all__ = ["getstatusoutput","getoutput","getstatus"] 27 28# Module 'commands' 29# 30# Various tools for executing commands and looking at their output and status. 31# 32# NB This only works (and is only relevant) for UNIX. 33 34 35# Get 'ls -l' status for an object into a string 36# 37def getstatus(file): 38 """Return output of "ls -ld <file>" in a string.""" 39 import warnings 40 warnings.warn("commands.getstatus() is deprecated", DeprecationWarning, 2) 41 return getoutput('ls -ld' + mkarg(file)) 42 43 44# Get the output from a shell command into a string. 45# The exit status is ignored; a trailing newline is stripped. 46# Assume the command will work with '{ ... ; } 2>&1' around it.. 47# 48def getoutput(cmd): 49 """Return output (stdout or stderr) of executing cmd in a shell.""" 50 return getstatusoutput(cmd)[1] 51 52 53# Ditto but preserving the exit status. 54# Returns a pair (sts, output) 55# 56def getstatusoutput(cmd): 57 """Return (status, output) of executing cmd in a shell.""" 58 import os 59 pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r') 60 text = pipe.read() 61 sts = pipe.close() 62 if sts is None: sts = 0 63 if text[-1:] == '\n': text = text[:-1] 64 return sts, text 65 66 67# Make command argument from directory and pathname (prefix space, add quotes). 68# 69def mk2arg(head, x): 70 import os 71 return mkarg(os.path.join(head, x)) 72 73 74# Make a shell command argument from a string. 75# Return a string beginning with a space followed by a shell-quoted 76# version of the argument. 77# Two strategies: enclose in single quotes if it contains none; 78# otherwise, enclose in double quotes and prefix quotable characters 79# with backslash. 80# 81def mkarg(x): 82 if '\'' not in x: 83 return ' \'' + x + '\'' 84 s = ' "' 85 for c in x: 86 if c in '\\$"`': 87 s = s + '\\' 88 s = s + c 89 s = s + '"' 90 return s 91