--- /dev/null
+#!/usr/bin/env python
+
+
+# https://gist.github.com/4368898
+# Public domain code by anatoly techtonik <techtonik@gmail.com>
+# AKA Linux `which` and Windows `where`
+
+
+import os
+import sys
+
+
+def find_executable(executable, path=None):
+ """Find if 'executable' can be run. Looks for it in 'path'
+ (string that lists directories separated by 'os.pathsep';
+ defaults to os.environ['PATH']). Checks for all executable
+ extensions. Returns full path or None if no command is found.
+ """
+ if path is None:
+ path = os.environ['PATH']
+ paths = path.split(os.pathsep)
+ extlist = ['']
+ if os.name == 'os2':
+ (base, ext) = os.path.splitext(executable)
+ # executable files on OS/2 can have an arbitrary extension, but
+ # .exe is automatically appended if no dot is present in the name
+ if not ext:
+ executable = executable + ".exe"
+ elif sys.platform == 'win32':
+ pathext = os.environ['PATHEXT'].lower().split(os.pathsep)
+ (base, ext) = os.path.splitext(executable)
+ if ext.lower() not in pathext:
+ extlist = pathext
+ for ext in extlist:
+ execname = executable + ext
+ if os.path.isfile(execname):
+ return execname
+ else:
+ for p in paths:
+ f = os.path.join(p, execname)
+ if os.path.isfile(f):
+ return f
+ else:
+ return None
+
+
+if __name__ == '__main__':
+ print(find_executable('git'))
--- /dev/null
+#! /usr/bin/env python
+
+import os
+import subprocess
+import sys
+from ppu_tu import setup, teardown, find_in_path # noqa
+
+
+tmp_dir = None
+
+test_prog_path = find_in_path('which.py')
+if not test_prog_path:
+ sys.exit("Cannot find which.py in %s" % os.environ["PATH"])
+
+
+def test_which():
+ assert subprocess.check_output(
+ [sys.executable, test_prog_path, "which.py"],
+ universal_newlines=True).strip() == test_prog_path
+ assert subprocess.check_output(
+ [sys.executable, test_prog_path, "WhoWhereWhenceWhichWhereIs.py"],
+ universal_newlines=True).strip() == ''