Skip to content

Instantly share code, notes, and snippets.

@techtonik
Last active April 4, 2022 06:23
Show Gist options
  • Save techtonik/4368898 to your computer and use it in GitHub Desktop.
Save techtonik/4368898 to your computer and use it in GitHub Desktop.
Python Which/Where - Find executable
#!/usr/bin/env python
# https://gist.github.com/4368898
# Public domain code by anatoly techtonik <techtonik@gmail.com>
# AKA Linux `which` and Windows `where`
# For Python 3 you probably want
# https://docs.python.org/dev/library/shutil.html#shutil.which
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
# Windows looks for binaries in current dir first
paths.insert(0, '')
for ext in extlist:
execname = executable + ext
for p in paths:
f = os.path.join(p, execname)
if os.path.isfile(f):
return f
else:
return None
if __name__ == '__main__':
if sys.argv[1:]:
print(find_executable(sys.argv[1]))
else:
print('usage: find_executable.py <progname>')
@techtonik
Copy link
Author

Added a link to shutil.which for Python 3 users.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment