Last active
April 4, 2022 06:23
-
-
Save techtonik/4368898 to your computer and use it in GitHub Desktop.
Python Which/Where - Find executable
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# https://gist.github.com/4368898 | |
# Public domain code by anatoly techtonik <[email protected]> | |
# 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>') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Added a link to
shutil.which
for Python 3 users.