Mercurial > hg > config
view python/lsex.py @ 125:a51df2382390
new program that does silly things
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Fri, 04 Mar 2011 11:43:15 -0800 |
parents | 71576cdc28ab |
children | 77e7cab3e9f2 |
line wrap: on
line source
#!/usr/bin/env python import os import sys from optparse import OptionParser # make sure duplicate path elements aren't printed twice def ordered_set(alist): seen = set() new = [] for item in alist: if item in seen: continue seen.add(item) new.append(item) return new def lsex(path=None): """ list executable files on the path - path: list of directories to search. if not specified, use system path """ if path is None: # use system path path = ordered_set(os.environ['PATH'].split(':')) executables = [] # add the executable files to the list for i in path: if not os.path.isdir(i): continue files = [ os.path.join(i,j) for j in os.listdir(i) ] files = filter(lambda x: os.access(x, os.X_OK), files) files.sort() # just to make the output pretty executables.extend(files) return executables def executable_names(path=None): executables = lsex(path) executables = set([os.path.basename(i) for i in executables]) return executables if __name__ == '__main__': parser = OptionParser() parser.add_option('--names', action='store_true', default=False, help="list only the set of names") options, args = parser.parse_args() if options.names: for i in sorted(executable_names()): print i sys.exit(0) for i in lsex(): print i