annotate Lib/commands.py @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 000ae642f9b8
children 13846379347d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # Module 'commands'
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 #
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 # Various tools for executing commands and looking at their output and status.
774
7c8abce19798 path -> posixpath
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
4 #
7c8abce19798 path -> posixpath
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
5 # NB This only works (and is only relevant) for UNIX.
5
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 # Get 'ls -l' status for an object into a string
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 #
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 def getstatus(file):
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 return getoutput('ls -ld' + mkarg(file))
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 # Get the output from a shell command into a string.
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 # The exit status is ignored; a trailing newline is stripped.
356
ab05efed03e9 Now uses pipes.
Guido van Rossum <guido@python.org>
parents: 30
diff changeset
16 # Assume the command will work with '{ ... ; } 2>&1' around it..
5
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 #
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 def getoutput(cmd):
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 return getstatusoutput(cmd)[1]
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 # Ditto but preserving the exit status.
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 # Returns a pair (sts, output)
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 #
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 def getstatusoutput(cmd):
1403
6278933d02e3 * string.py: added rindex(), rfind(); changed index() to interpret
Guido van Rossum <guido@python.org>
parents: 914
diff changeset
26 import os
6278933d02e3 * string.py: added rindex(), rfind(); changed index() to interpret
Guido van Rossum <guido@python.org>
parents: 914
diff changeset
27 pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')
356
ab05efed03e9 Now uses pipes.
Guido van Rossum <guido@python.org>
parents: 30
diff changeset
28 text = pipe.read()
ab05efed03e9 Now uses pipes.
Guido van Rossum <guido@python.org>
parents: 30
diff changeset
29 sts = pipe.close()
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 356
diff changeset
30 if sts == None: sts = 0
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 356
diff changeset
31 if text[-1:] == '\n': text = text[:-1]
5
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 return sts, text
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 # Make command argument from directory and pathname (prefix space, add quotes).
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 #
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 def mk2arg(head, x):
1403
6278933d02e3 * string.py: added rindex(), rfind(); changed index() to interpret
Guido van Rossum <guido@python.org>
parents: 914
diff changeset
38 import os
6278933d02e3 * string.py: added rindex(), rfind(); changed index() to interpret
Guido van Rossum <guido@python.org>
parents: 914
diff changeset
39 return mkarg(os.path.join(head, x))
5
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 # Make a shell command argument from a string.
2066
000ae642f9b8 Added clarifying comment
Guido van Rossum <guido@python.org>
parents: 1403
diff changeset
43 # Return a string beginning with a space followed by a shell-quoted
000ae642f9b8 Added clarifying comment
Guido van Rossum <guido@python.org>
parents: 1403
diff changeset
44 # version of the argument.
5
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 # Two strategies: enclose in single quotes if it contains none;
356
ab05efed03e9 Now uses pipes.
Guido van Rossum <guido@python.org>
parents: 30
diff changeset
46 # otherwise, enclose in double quotes and prefix quotable characters
5
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 # with backslash.
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 #
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 def mkarg(x):
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 if '\'' not in x:
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 return ' \'' + x + '\''
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 s = ' "'
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 for c in x:
914
74b716e9ac49 New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents: 774
diff changeset
54 if c in '\\$"`':
5
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 s = s + '\\'
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 s = s + c
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 s = s + '"'
5570dbb1ce55 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 return s