#! /usr/bin/env python2.2 ## ## vi:ts=4:et ## ##---------------------------------------------------------------------------## ## Author: ## Markus F.X.J. Oberhumer ## Copyright: ## Distributed under the terms of the GNU General Public License. ## Description: ## xx ## Usage: ## python findexe ls ## python findexe "python*" [glob expression] ##---------------------------------------------------------------------------## import fnmatch, getopt, os, re, string, sys # /*********************************************************************** # // # ************************************************************************/ opts = { "abspath": 0, "realpath": 0, } def getname(n): if opts.get("abspath"): n = os.path.abspath(n) if opts.get("realpath"): n = os.path.realpath(n) if opts.get("normpath"): n = os.path.normpath(n) if opts.get("normcase"): n = os.path.normcase(n) return n def main(argv): longopts = opts.keys() longopts.sort() xopts, xargs = getopt.getopt(argv[1:], "", longopts) ##print xopts, xargs for o, a in xopts: if o[:2] == "--": o = o[2:] assert o ##print o, a if not a: a = 1 opts[o] = a # path = os.environ.get("PATH", "") path = string.splitfields(path, os.pathsep) # re_flags = 0 if os.name == "nt": re_flags = re.I patterns = [] for pat in xargs: p = fnmatch.translate(pat) r = re.compile(p, re_flags) patterns.append(r) # result = [] for dir in path: if not dir or not os.path.isdir(dir): continue try: names = os.listdir(dir) except: names = [] names.sort() for n in names: for pat in patterns: if pat.match(n): fn = os.path.join(dir, n) if os.path.isfile(fn): exe = getname(fn) if not exe in result: result.append(exe) for r in result: print r if __name__ == "__main__": sys.exit(main(sys.argv))