At the release of 1.0.1.
[python/dscho.git] / Lib / commands.py
blob428a830764f3e68f89f1cd83620de1fb6d59d1e7
1 # Module 'commands'
3 # Various tools for executing commands and looking at their output and status.
5 # NB This only works (and is only relevant) for UNIX.
8 # Get 'ls -l' status for an object into a string
10 def getstatus(file):
11 return getoutput('ls -ld' + mkarg(file))
14 # Get the output from a shell command into a string.
15 # The exit status is ignored; a trailing newline is stripped.
16 # Assume the command will work with '{ ... ; } 2>&1' around it..
18 def getoutput(cmd):
19 return getstatusoutput(cmd)[1]
22 # Ditto but preserving the exit status.
23 # Returns a pair (sts, output)
25 def getstatusoutput(cmd):
26 import os
27 pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')
28 text = pipe.read()
29 sts = pipe.close()
30 if sts == None: sts = 0
31 if text[-1:] == '\n': text = text[:-1]
32 return sts, text
35 # Make command argument from directory and pathname (prefix space, add quotes).
37 def mk2arg(head, x):
38 import os
39 return mkarg(os.path.join(head, x))
42 # Make a shell command argument from a string.
43 # Two strategies: enclose in single quotes if it contains none;
44 # otherwise, enclose in double quotes and prefix quotable characters
45 # with backslash.
47 def mkarg(x):
48 if '\'' not in x:
49 return ' \'' + x + '\''
50 s = ' "'
51 for c in x:
52 if c in '\\$"`':
53 s = s + '\\'
54 s = s + c
55 s = s + '"'
56 return s