blob: 99dc35544c6aeba640930c6c7caabf88097a5c5c [file] [log] [blame]
Guido van Rossumf06ee5f1996-11-27 19:52:01 +00001#! /usr/bin/env 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 Rossum9476a781997-10-20 23:48:01 +00007import sys
8if sys.path[0] in (".", ""): del sys.path[0]
9
Walter Dörwaldaaab30e2002-09-11 20:36:02 +000010import sys, os
Guido van Rossumec758ea1991-06-04 20:36:54 +000011from stat import *
12
13def msg(str):
Tim Peters70c43782001-01-17 08:48:39 +000014 sys.stderr.write(str + '\n')
Guido van Rossumec758ea1991-06-04 20:36:54 +000015
Walter Dörwaldaaab30e2002-09-11 20:36:02 +000016pathlist = os.environ['PATH'].split(':')
Guido van Rossumec758ea1991-06-04 20:36:54 +000017
18sts = 0
Guido van Rossumfcd1e6e1992-03-02 16:17:31 +000019longlist = ''
20
21if sys.argv[1:] and sys.argv[1][:2] == '-l':
Tim Peters70c43782001-01-17 08:48:39 +000022 longlist = sys.argv[1]
23 del sys.argv[1]
Guido van Rossumec758ea1991-06-04 20:36:54 +000024
25for prog in sys.argv[1:]:
Tim Peters70c43782001-01-17 08:48:39 +000026 ident = ()
27 for dir in pathlist:
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +000028 filename = os.path.join(dir, prog)
Tim Peters70c43782001-01-17 08:48:39 +000029 try:
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +000030 st = os.stat(filename)
Tim Peters70c43782001-01-17 08:48:39 +000031 except os.error:
32 continue
33 if not S_ISREG(st[ST_MODE]):
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +000034 msg(filename + ': not a disk file')
Tim Peters70c43782001-01-17 08:48:39 +000035 else:
36 mode = S_IMODE(st[ST_MODE])
37 if mode & 0111:
38 if not ident:
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +000039 print filename
Tim Peters70c43782001-01-17 08:48:39 +000040 ident = st[:3]
41 else:
42 if st[:3] == ident:
43 s = 'same as: '
44 else:
45 s = 'also: '
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +000046 msg(s + filename)
Tim Peters70c43782001-01-17 08:48:39 +000047 else:
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +000048 msg(filename + ': not executable')
Tim Peters70c43782001-01-17 08:48:39 +000049 if longlist:
Andrew M. Kuchlingac6df952003-05-13 18:14:25 +000050 sts = os.system('ls ' + longlist + ' ' + filename)
Tim Peters70c43782001-01-17 08:48:39 +000051 if sts: msg('"ls -l" exit status: ' + `sts`)
52 if not ident:
53 msg(prog + ': not found')
54 sts = 1
Guido van Rossumec758ea1991-06-04 20:36:54 +000055
56sys.exit(sts)