| 
									
										
										
										
											1996-11-27 19:52:01 +00:00
										 |  |  | #! /usr/bin/env python | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Variant of "which". | 
					
						
							|  |  |  | # On stderr, near and total misses are reported. | 
					
						
							| 
									
										
										
										
											1992-03-02 16:17:31 +00:00
										 |  |  | # '-l<flags>' argument adds ls -l<flags> of each file found. | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-10-20 23:48:01 +00:00
										 |  |  | import sys | 
					
						
							|  |  |  | if sys.path[0] in (".", ""): del sys.path[0] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-09-11 20:36:02 +00:00
										 |  |  | import sys, os | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | from stat import * | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def msg(str): | 
					
						
							| 
									
										
										
										
											2001-01-17 08:48:39 +00:00
										 |  |  |     sys.stderr.write(str + '\n') | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-08-09 17:27:55 +00:00
										 |  |  | def main(): | 
					
						
							|  |  |  |     pathlist = os.environ['PATH'].split(os.pathsep) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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: | 
					
						
							|  |  |  |             filename = os.path.join(dir, prog) | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 st = os.stat(filename) | 
					
						
							|  |  |  |             except os.error: | 
					
						
							|  |  |  |                 continue | 
					
						
							|  |  |  |             if not S_ISREG(st[ST_MODE]): | 
					
						
							|  |  |  |                 msg(filename + ': not a disk file') | 
					
						
							| 
									
										
										
										
											2001-01-17 08:48:39 +00:00
										 |  |  |             else: | 
					
						
							| 
									
										
										
										
											2004-08-09 17:27:55 +00:00
										 |  |  |                 mode = S_IMODE(st[ST_MODE]) | 
					
						
							|  |  |  |                 if mode & 0111: | 
					
						
							|  |  |  |                     if not ident: | 
					
						
							|  |  |  |                         print filename | 
					
						
							|  |  |  |                         ident = st[:3] | 
					
						
							|  |  |  |                     else: | 
					
						
							|  |  |  |                         if st[:3] == ident: | 
					
						
							|  |  |  |                             s = 'same as: ' | 
					
						
							|  |  |  |                         else: | 
					
						
							|  |  |  |                             s = 'also: ' | 
					
						
							|  |  |  |                         msg(s + filename) | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     msg(filename + ': not executable') | 
					
						
							|  |  |  |             if longlist: | 
					
						
							|  |  |  |                 sts = os.system('ls ' + longlist + ' ' + filename) | 
					
						
							|  |  |  |                 if sts: msg('"ls -l" exit status: ' + repr(sts)) | 
					
						
							|  |  |  |         if not ident: | 
					
						
							|  |  |  |             msg(prog + ': not found') | 
					
						
							|  |  |  |             sts = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sys.exit(sts) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     main() |