Python 3.3+shutilфункция
shutil.which()
система и окружение
Ищет исполняемую программу в PATH, как команда which, и возвращает её путь или None, если программа не найдена.
Синтаксис
shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None) -> str | None
Ненайденная программа — это None, а не исключение: результат надо проверить до передачи в subprocess, иначе ошибка всплывёт позже и непонятнее. Файл без права на исполнение не находится, даже если лежит в PATH. Если в имени есть каталог ('./tool', полный путь), PATH не просматривается — проверяется сам файл. На Windows подставляются расширения из PATHEXT, поэтому which('python') находит python.exe.
Примеры
import os, shutil, sys
print(shutil.which('no-such-program-xyz')) # → None
print(shutil.which(sys.executable) is not None) # → True
exe_dir, exe_name = os.path.split(sys.executable)
print(shutil.which(exe_name, path=exe_dir)) # → ? /usr/bin/python3.14 — путь зависит от машины
import os, shutil
with open('tool', 'w') as f:
f.write('#!/bin/sh\n')
print(shutil.which('tool', path='.')) # → None — нет права на исполнение
os.chmod('tool', 0o755)
print(shutil.which('tool', path='.')) # → ? ./tool — на Windows иначе
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности