#python-3.x
#python-3.x
Вопрос:
Мне нужно найти файл, содержащийся в нашем программном обеспечении с помощью python3.
Проблема в том, что исполняемый файл, который можно найти в the bash
среде с find
помощью command, не может быть найден в zsh
среде с python3. Этот файл не находится ни в $PATH
, ни os.environ["PATH"]
. Я смог найти его только тогда, когда я указал его абсолютный путь в качестве параметра для shutil
amp; which
.
Однако, поскольку абсолютный путь зависит от пути установки программного обеспечения, он отличается для каждого пользователя. Поэтому я хочу попросить общий метод, который может найти этот возбуждаемый файл, указав только его имя. Большое спасибо!
Ответ №1:
shutil.which
Функция использует $PATH
переменную для поиска исполняемых файлов. Он работает точно так же, как bash which
или command -v
.
find
Команда использует каталог в качестве входных данных и выполняет рекурсивный поиск внутри этого каталога.
Чтобы выполнить поиск, вам нужно либо добавить каталог, в котором находится ваш исполняемый файл, к вашему текущему ПУТИ, а затем использовать shutil.which
для его поиска
import os
import shutil
os.environ['PATH'] = ':/exe/location'
exec_location = shutil.which('myexe')
или используйте функцию, которая работает аналогично find
команде :
from pathlib import Path
from typing import Optional
def find(name: str, location: Path) -> Optional[Path]:
files = [ f for f in location.rglob('*') if f.is_file()]
for f in files:
if f.name == name:
return f.resolve()
return None
Комментарии:
1. Спасибо за ответ. Согласно PEP 632 , distutils устарел с python 3.10, ответ здесь все еще работает.