| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | #! /usr/local/python | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1992-03-30 11:13:59 +00:00
										 |  |  | import sys, os, string | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | from stat import * | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def msg(str): | 
					
						
							|  |  |  | 	sys.stderr.write(str + '\n') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1992-03-30 11:13:59 +00:00
										 |  |  | pathlist = string.splitfields(os.environ['PATH'], ':') | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | sts = 0 | 
					
						
							| 
									
										
										
										
											1992-03-02 16:17:31 +00:00
										 |  |  | longlist = '' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if sys.argv[1:] and sys.argv[1][:2] == '-l': | 
					
						
							|  |  |  | 	longlist = sys.argv[1] | 
					
						
							|  |  |  | 	del sys.argv[1] | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | for prog in sys.argv[1:]: | 
					
						
							|  |  |  | 	ident = () | 
					
						
							|  |  |  | 	for dir in pathlist: | 
					
						
							| 
									
										
										
										
											1992-03-30 11:13:59 +00:00
										 |  |  | 		file = os.path.join(dir, prog) | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 		try: | 
					
						
							| 
									
										
										
										
											1992-03-30 11:13:59 +00:00
										 |  |  | 			st = os.stat(file) | 
					
						
							|  |  |  | 		except os.error: | 
					
						
							| 
									
										
										
										
											1992-03-02 16:17:31 +00:00
										 |  |  | 			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] | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 				else: | 
					
						
							| 
									
										
										
										
											1992-03-02 16:17:31 +00:00
										 |  |  | 					if st[:3] == ident: | 
					
						
							|  |  |  | 						s = 'same as: ' | 
					
						
							|  |  |  | 					else: | 
					
						
							|  |  |  | 						s = 'also: ' | 
					
						
							|  |  |  | 					msg(s + file) | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 			else: | 
					
						
							| 
									
										
										
										
											1992-03-02 16:17:31 +00:00
										 |  |  | 				msg(file + ': not executable') | 
					
						
							|  |  |  | 		if longlist: | 
					
						
							| 
									
										
										
										
											1992-03-30 11:13:59 +00:00
										 |  |  | 			sts = os.system('ls ' + longlist + ' ' + file) | 
					
						
							| 
									
										
										
										
											1992-03-02 16:17:31 +00:00
										 |  |  | 			if sts: msg('"ls -l" exit status: ' + `sts`) | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 	if not ident: | 
					
						
							|  |  |  | 		msg(prog + ': not found') | 
					
						
							|  |  |  | 		sts = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | sys.exit(sts) |