|  | #! /usr/local/python | 
|  |  | 
|  | # Variant of "which". | 
|  | # On stderr, near and total misses are reported. | 
|  | # '-l<flags>' argument adds ls -l<flags> of each file found. | 
|  |  | 
|  | import sys, os, string | 
|  | from stat import * | 
|  |  | 
|  | def msg(str): | 
|  | sys.stderr.write(str + '\n') | 
|  |  | 
|  | pathlist = string.splitfields(os.environ['PATH'], ':') | 
|  |  | 
|  | sts = 0 | 
|  | longlist = '' | 
|  |  | 
|  | if sys.argv[1:] and sys.argv[1][:2] == '-l': | 
|  | longlist = sys.argv[1] | 
|  | del sys.argv[1] | 
|  |  | 
|  | for prog in sys.argv[1:]: | 
|  | ident = () | 
|  | for dir in pathlist: | 
|  | file = os.path.join(dir, prog) | 
|  | try: | 
|  | st = os.stat(file) | 
|  | except os.error: | 
|  | continue | 
|  | if not S_ISREG(st[ST_MODE]): | 
|  | msg(file + ': not a disk file') | 
|  | else: | 
|  | mode = S_IMODE(st[ST_MODE]) | 
|  | if mode & 0111: | 
|  | if not ident: | 
|  | print file | 
|  | ident = st[:3] | 
|  | else: | 
|  | if st[:3] == ident: | 
|  | s = 'same as: ' | 
|  | else: | 
|  | s = 'also: ' | 
|  | msg(s + file) | 
|  | else: | 
|  | msg(file + ': not executable') | 
|  | if longlist: | 
|  | sts = os.system('ls ' + longlist + ' ' + file) | 
|  | if sts: msg('"ls -l" exit status: ' + `sts`) | 
|  | if not ident: | 
|  | msg(prog + ': not found') | 
|  | sts = 1 | 
|  |  | 
|  | sys.exit(sts) |