home *** CD-ROM | disk | FTP | other *** search
- #! /usr/bin/env 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
- if sys.path[0] in (".", ""): del sys.path[0]
-
- 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)
-