diff options
author | hut <hut@lavabit.com> | 2010-01-23 00:44:35 +0100 |
---|---|---|
committer | hut <hut@lavabit.com> | 2010-01-23 00:44:35 +0100 |
commit | 2dc35a085a285a274a960c8a029d4e7bc8026aee (patch) | |
tree | 7cfcebb040ae26d2309f255a304de65cbb40e796 | |
parent | b6d4e3e558d84ee7b211ed9332fe9b7002cb8ec2 (diff) | |
download | ranger-2dc35a085a285a274a960c8a029d4e7bc8026aee.tar.gz |
ext: added get_executables function
-rw-r--r-- | ranger/ext/get_executables.py | 47 |
1 files changed, 47 insertions, 0 deletions
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 <hut@lavabit.com> +# +# 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 |