import os | |
import sys | |
from typing import Optional | |
def which(thefile: str) -> Optional[str]: | |
path = os.environ.get("PATH", os.defpath).split(os.pathsep) | |
for d in path: | |
fname = os.path.join(d, thefile) | |
fnames = [fname] | |
if sys.platform == "win32": | |
exts = os.environ.get("PATHEXT", "").split(os.pathsep) | |
fnames += [fname + ext for ext in exts] | |
for name in fnames: | |
if os.access(name, os.F_OK | os.X_OK) and not os.path.isdir(name): | |
return name | |
return None |