From 2dc35a085a285a274a960c8a029d4e7bc8026aee Mon Sep 17 00:00:00 2001 From: hut Date: Sat, 23 Jan 2010 00:44:35 +0100 Subject: ext: added get_executables function --- ranger/ext/get_executables.py | 47 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 ranger/ext/get_executables.py diff --git a/ranger/ext/get_executables.py b/ranger/ext/get_executables.py new file mode 100644 index 00000000..37577573 --- /dev/null +++ b/ranger/ext/get_executables.py @@ -0,0 +1,47 @@ +# Copyright (c) 2009, 2010 hut +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +import stat +import os +from os.path import isfile, join, exists +from ranger.ext.iter_tools import unique + +def get_executables(*paths): + """ + Return all executable files in each of the given directories. + + Looks in $PATH by default. + """ + if not paths: + try: + pathstring = os.environ['PATH'] + except KeyError: + return () + paths = unique(pathstring.split(':')) + + executables = set() + for path in paths: + try: + content = os.listdir(path) + except: + continue + for item in content: + abspath = join(path, item) + try: + filestat = os.stat(abspath) + except: + continue + if filestat.st_mode & (stat.S_IXOTH | stat.S_IFREG): + executables.add(item) + return executables -- cgit 1.4.1-2-gfad0