| 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 |