blob: 07c0d2e7d071f613d10798a9fefca03477d39861 [file] [log] [blame]
Guido van Rossum41ffccb1993-04-01 20:50:35 +00001#! /usr/local/bin/python
Guido van Rossumec758ea1991-06-04 20:36:54 +00002
3# Variant of "which".
4# On stderr, near and total misses are reported.
Guido van Rossumfcd1e6e1992-03-02 16:17:31 +00005# '-l<flags>' argument adds ls -l<flags> of each file found.
Guido van Rossumec758ea1991-06-04 20:36:54 +00006
Guido van Rossume7b88e71992-03-30 11:13:59 +00007import sys, os, string
Guido van Rossumec758ea1991-06-04 20:36:54 +00008from stat import *
9
10def msg(str):
11 sys.stderr.write(str + '\n')
12
Guido van Rossume7b88e71992-03-30 11:13:59 +000013pathlist = string.splitfields(os.environ['PATH'], ':')
Guido van Rossumec758ea1991-06-04 20:36:54 +000014
15sts = 0
Guido van Rossumfcd1e6e1992-03-02 16:17:31 +000016longlist = ''
17
18if sys.argv[1:] and sys.argv[1][:2] == '-l':
19 longlist = sys.argv[1]
20 del sys.argv[1]
Guido van Rossumec758ea1991-06-04 20:36:54 +000021
22for prog in sys.argv[1:]:
23 ident = ()
24 for dir in pathlist:
Guido van Rossume7b88e71992-03-30 11:13:59 +000025 file = os.path.join(dir, prog)
Guido van Rossumec758ea1991-06-04 20:36:54 +000026 try:
Guido van Rossume7b88e71992-03-30 11:13:59 +000027 st = os.stat(file)
28 except os.error:
Guido van Rossumfcd1e6e1992-03-02 16:17:31 +000029 continue
30 if not S_ISREG(st[ST_MODE]):
31 msg(file + ': not a disk file')
32 else:
33 mode = S_IMODE(st[ST_MODE])
34 if mode & 0111:
35 if not ident:
36 print file
37 ident = st[:3]
38 else:
39 if st[:3] == ident:
40 s = 'same as: '
41 else:
42 s = 'also: '
43 msg(s + file)
44 else:
45 msg(file + ': not executable')
46 if longlist:
Guido van Rossume7b88e71992-03-30 11:13:59 +000047 sts = os.system('ls ' + longlist + ' ' + file)
Guido van Rossumfcd1e6e1992-03-02 16:17:31 +000048 if sts: msg('"ls -l" exit status: ' + `sts`)
Guido van Rossumec758ea1991-06-04 20:36:54 +000049 if not ident:
50 msg(prog + ': not found')
51 sts = 1
52
53sys.exit(sts)