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