Guido van Rossum | ec758ea | 1991-06-04 20:36:54 +0000 | [diff] [blame] | 1 | #! /usr/local/python |
| 2 | |
| 3 | # Variant of "which". |
| 4 | # On stderr, near and total misses are reported. |
| 5 | |
| 6 | import sys, posix, string, path |
| 7 | from stat import * |
| 8 | |
| 9 | def msg(str): |
| 10 | sys.stderr.write(str + '\n') |
| 11 | |
| 12 | pathlist = string.splitfields(posix.environ['PATH'], ':') |
| 13 | |
| 14 | sts = 0 |
| 15 | |
| 16 | for prog in sys.argv[1:]: |
| 17 | ident = () |
| 18 | for dir in pathlist: |
Guido van Rossum | 9c5c808 | 1991-07-01 18:22:34 +0000 | [diff] [blame] | 19 | file = path.join(dir, prog) |
Guido van Rossum | ec758ea | 1991-06-04 20:36:54 +0000 | [diff] [blame] | 20 | try: |
| 21 | st = posix.stat(file) |
| 22 | if S_ISREG(st[ST_MODE]): |
| 23 | mode = S_IMODE(st[ST_MODE]) |
| 24 | if mode % 2 or mode/8 % 2 or mode/64 % 2: |
| 25 | if ident: |
| 26 | if st[:3] = ident: |
| 27 | s = ': same as ' |
| 28 | else: |
| 29 | s = ': also ' |
| 30 | msg(prog + s + file) |
| 31 | else: |
| 32 | print file |
| 33 | ident = st[:3] |
| 34 | else: |
| 35 | msg(file + ': not executable') |
| 36 | else: |
| 37 | msg(file + ': not a disk file') |
| 38 | except posix.error: |
| 39 | pass |
| 40 | if not ident: |
| 41 | msg(prog + ': not found') |
| 42 | sts = 1 |
| 43 | |
| 44 | sys.exit(sts) |