Mercurial > hg > config
annotate python/lsex.py @ 929:7c4be71a560b default tip
remove old aliases
| author | Jeff Hammel <k0scist@gmail.com> | 
|---|---|
| date | Mon, 20 Oct 2025 15:22:19 -0700 | 
| parents | 20aa4a6ef719 | 
| children | 
| rev | line source | 
|---|---|
| 
0
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
1 #!/usr/bin/env python | 
| 865 | 2 | 
| 
0
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
3 import os | 
| 
69
 
71576cdc28ab
add option to pritn set of names
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
0 
diff
changeset
 | 
4 import sys | 
| 
 
71576cdc28ab
add option to pritn set of names
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
0 
diff
changeset
 | 
5 from optparse import OptionParser | 
| 
0
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
6 | 
| 865 | 7 try: | 
| 8 # python 2 | |
| 9 string = (str, unicode) | |
| 10 except NameError: | |
| 11 # python 3 | |
| 12 string = (str,) | |
| 13 | |
| 
0
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
14 def ordered_set(alist): | 
| 865 | 15 """make sure duplicate path elements aren't printed twice""" | 
| 16 | |
| 
0
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
17 seen = set() | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
18 new = [] | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
19 for item in alist: | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
20 if item in seen: | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
21 continue | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
22 seen.add(item) | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
23 new.append(item) | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
24 return new | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
25 | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
26 def lsex(path=None): | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
27 """ | 
| 367 | 28 list of executable files on the path | 
| 29 | |
| 30 - path: list or PATH-style string of directories to search. | |
| 31 if not specified, use system PATH | |
| 
0
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
32 """ | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
33 | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
34 if path is None: | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
35 # use system path | 
| 367 | 36 path = os.environ['PATH'] | 
| 865 | 37 if isinstance(path, string): | 
| 367 | 38 path = ordered_set(path.split(os.pathsep)) | 
| 
0
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
39 | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
40 executables = [] | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
41 | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
42 # add the executable files to the list | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
43 for i in path: | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
44 if not os.path.isdir(i): | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
45 continue | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
46 files = [ os.path.join(i,j) for j in os.listdir(i) ] | 
| 865 | 47 files = list(filter(lambda x: os.access(x, os.X_OK), files)) | 
| 
0
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
48 files.sort() # just to make the output pretty | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
49 executables.extend(files) | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
50 return executables | 
| 
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
51 | 
| 
69
 
71576cdc28ab
add option to pritn set of names
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
0 
diff
changeset
 | 
52 def executable_names(path=None): | 
| 
 
71576cdc28ab
add option to pritn set of names
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
0 
diff
changeset
 | 
53 executables = lsex(path) | 
| 
 
71576cdc28ab
add option to pritn set of names
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
0 
diff
changeset
 | 
54 executables = set([os.path.basename(i) for i in executables]) | 
| 
 
71576cdc28ab
add option to pritn set of names
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
0 
diff
changeset
 | 
55 return executables | 
| 
 
71576cdc28ab
add option to pritn set of names
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
0 
diff
changeset
 | 
56 | 
| 
0
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
57 if __name__ == '__main__': | 
| 
69
 
71576cdc28ab
add option to pritn set of names
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
0 
diff
changeset
 | 
58 parser = OptionParser() | 
| 
 
71576cdc28ab
add option to pritn set of names
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
0 
diff
changeset
 | 
59 parser.add_option('--names', action='store_true', default=False, | 
| 
 
71576cdc28ab
add option to pritn set of names
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
0 
diff
changeset
 | 
60 help="list only the set of names") | 
| 
 
71576cdc28ab
add option to pritn set of names
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
0 
diff
changeset
 | 
61 | 
| 
 
71576cdc28ab
add option to pritn set of names
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
0 
diff
changeset
 | 
62 options, args = parser.parse_args() | 
| 
 
71576cdc28ab
add option to pritn set of names
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
0 
diff
changeset
 | 
63 if options.names: | 
| 865 | 64 print ('\n'.join(sorted(executable_names()))) | 
| 
69
 
71576cdc28ab
add option to pritn set of names
 
Jeff Hammel <jhammel@mozilla.com> 
parents: 
0 
diff
changeset
 | 
65 sys.exit(0) | 
| 865 | 66 | 
| 
0
 
f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
 
k0s <k0scist@gmail.com> 
parents:  
diff
changeset
 | 
67 for i in lsex(): | 
| 865 | 68 print (i) | 
