Сообщить об ошибке.

Функция which() модуля shutil в Python

Найти путь к исполняемому файлу

Синтаксис:

import shutil

shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)

Параметры:

  • cmd - str, исполняемый файл.
  • mode=os.F_OK | os.X_OK - маска прав файла cmd,
  • path=None - переменная среды окружения.

Возвращаемое значение:

  • str, путь к исполняемому файлу cmd.

Описание:

Функция which() модуля shutil возвращает путь к исполняемому файлу, который будет запущен, если будет вызван данный cmd. Если никакая команда не будет вызвана, вернет None.

Аргумент mode - это маска прав, переданная в функции os.access(), по умолчанию определяющая, существует ли файл и является ли он исполняемым.

Если путь path не указан, то используются результаты os.environ(), возвращающие либо значение PATH, либо откат к os.defpath.

Изменено в Python 3.12: В Windows текущий каталог больше не добавляется к пути поиска, если mode включает os.X_OK и WinAPI требуется, чтобы значение currentdirectoryforexepathw(cmd) было равно false, иначе добавляется текущий каталог, даже если он уже есть в пути поиска. PATHEXT теперь используется, даже если cmd включает компонент каталога или заканчивается расширением, указанным в PATHEXT и теперь можно найти имена файлов, у которых нет расширения.

Изменено в Python 3.12.1: В Windows, если mode включает os.X_OK, исполняемые файлы с расширением в PATHEXT будут предпочтительнее исполняемых файлов без соответствующего расширения. Это приближает поведение к поведению Python 3.11.

В Windows текущий каталог добавляется к пути, если mode не включает os.X_OK. Когда mode действительно включает os.X_OK, то будет проведен опрос Windows API NeedCurrentDirectoryForExePathW, чтобы определить, следует ли добавлять текущий каталог к path. Чтобы избежать обращения к текущему рабочему каталогу для поиска исполняемых файлов: необходимо установить переменную окружения NoDefaultCurrentDirectoryInExePath.

Также в Windows переменная PATHEXT используется для разрешения команд, которые, возможно, еще не содержат расширения. Например, если вызывается shutil.which("python"), то функция будет искать PATHEXT, чтобы искать python.exe внутри каталогов path.

Например, в Windows:

>>> import shutil
>>> shutil.which("python")
# 'C:\\Python33\\python.EXE'

Также применяется, когда cmd - это путь, содержащий компонент каталога:

>>> import shutil
>> shutil.which("C:\\Python33\\python")
# 'C:\\Python33\\python.EXE'

Пример использования:

# В Unix
>>> import shutil
>>> shutil.which("python")
# '/usr/bin/python'