Python Glossary English

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Сообщить о неточности