annotate Demo/comparisons/systemtest.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 84e2260db179
children 73758db2f464
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2651
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 #! /usr/local/bin/python
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 # 3) System Test
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 #
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 # Given a list of directories, report any bogus symbolic links contained
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 # anywhere in those subtrees. A bogus symbolic link is one that cannot
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 # be resolved because it points to a nonexistent or otherwise
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 # unresolvable file. Do *not* use an external find executable.
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 # Directories may be very very deep. Print a warning immediately if the
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 # system you're running on doesn't support symbolic links.
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
11
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 # This implementation:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 # - takes one optional argument, using the current directory as default
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 # - uses chdir to increase performance
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 # - sorts the names per directory
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 # - prints output lines of the form "path1 -> path2" as it goes
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 # - prints error messages about directories it can't list or chdir into
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
18
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 import os
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 import sys
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 from stat import *
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
22
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 def main():
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 try:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 # Note: can't test for presence of lstat -- it's always there
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 dummy = os.readlink
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 except AttributeError:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 print "This system doesn't have symbolic links"
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 sys.exit(0)
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 if sys.argv[1:]:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 prefix = sys.argv[1]
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 else:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 prefix = ''
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 if prefix:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 os.chdir(prefix)
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 if prefix[-1:] != '/': prefix = prefix + '/'
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 reportboguslinks(prefix)
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 else:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 reportboguslinks('')
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
40
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 def reportboguslinks(prefix):
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 try:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 names = os.listdir('.')
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 except os.error, msg:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 print "%s%s: can't list: %s" % (prefix, '.', msg)
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 return
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 names.sort()
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 for name in names:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 if name == os.curdir or name == os.pardir:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 continue
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 try:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 mode = os.lstat(name)[ST_MODE]
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 except os.error:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 print "%s%s: can't stat: %s" % (prefix, name, msg)
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 continue
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 if S_ISLNK(mode):
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 try:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 os.stat(name)
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 except os.error:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 print "%s%s -> %s" % \
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 (prefix, name, os.readlink(name))
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 elif S_ISDIR(mode):
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 try:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 os.chdir(name)
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 except os.error, msg:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 print "%s%s: can't chdir: %s" % \
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 (prefix, name, msg)
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 continue
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 try:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 reportboguslinks(prefix + name + '/')
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 finally:
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 os.chdir('..')
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
73
84e2260db179 commit -- why not...
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 main()