Форум сайта python.su
0
Коллеги, подскажите, пожалуйста!
Если я пишу программу для автоматизации, то мне важно найти в системе установленные программы, для того чтобы обращаться к ним. Полагаю, что простой поиск файла по имени может давать неоднозначные результаты. Нужно учитывать типовые пути поиска исполняемых программ для конкретной системы и это не очень переносимая задача.
Есть ли готовое решение для этого? (Во FreeBSD для таких задач есть команда whereis. в Линуксе - не знаю.)
Наверняка, для змеюки сделали такой модуль. Это весьма распространенная задача.
Ogogon.
Офлайн
253
ogogonТогда вам важно посмотреть на https://www.docker.com/, https://www.ansible.com/, https://www.saltstack.com/
Если я пишу программу для автоматизации
ogogon
Наверняка, для змеюки сделали такой модуль. Это весьма распространенная задача.
Офлайн
186
> мне важно найти в системе установленные программы, для того чтобы обращаться к ним.
Что означает “обратиться”? Если нужно выполнить программу, то os.execvp / subprocess самостоятельно могут найти путь к исполняемому файлу по информации из переменных окружения.
Офлайн
857
ogogonВ Linux тоже есть whereis
Во FreeBSD для таких задач есть команда whereis. в Линуксе - не знаю.
[guest@localhost ~]$ .rpmf `which whereis`
util-linux-2.29.1-2.fc26.x86_64
[guest@localhost ~]$
ogogonВо всех крупных программах эти пути сначала отыскиваются по известным местам, а потом настраиваются/перенастраиваются пользователем.
Если я пишу программу для автоматизации, то мне важно найти в системе установленные программы, для того чтобы обращаться к ним.
Отредактировано py.user.next (Ноя. 26, 2019 11:53:47)
Офлайн
0
Я благодарю за ответы, хотя несколько жаль, что они, увы, не по сути моего вопроса.
Тем не менее, я сделаю несколько реплик, хотя сразу же попрошу не переводить их в нетематические дискуссии, тем более эмоциональные.
Кроме того, на форуме, по непонятным для меня причинам, нет опции предпросмотра написанного. Заранее прошу прощения, если будет выглядеть криво.
doza_andЕсли в целом - то не устраивает тем, что я хочу не этого.
Тогда вам важно посмотреть на https://www.docker.com/, https://www.ansible.com/, https://www.saltstack.com/
и ответить что вас не устраивает в готовых системах.
doza_andДаже спорить не буду.
Вообще управлять системой в которой чтото кудато неизвестно как установлено идея помоему порочная и обреченная на провал.
RodegastНесомненно. Но если их нет, то программа должна будет прекратить работу и аварийно завершиться.
Что означает “обратиться”? Если нужно выполнить программу, то os.execvp / subprocess самостоятельно могут найти путь к исполняемому файлу по информации из переменных окружения
py.user.nextПомилуй Бог, кто бы спорил?
Во всех крупных программах эти пути сначала отыскиваются по известным местам, а потом настраиваются/перенастраиваются пользователем.
py.user.nextА что с ней не так?
Только при чём тут FreeBSD?
py.user.nextЯ еще раз перечитал мой вопрос и там нет ни малейшего намека на то, что я собираюсь ставить в систему какие-то ненормативные пакеты. Не знаю, почему Вы пришли к такому выводу…
Неужто ты пишешь кросс-системную программу по типу швейцарского ножа, в котором есть всё, только всё по отдельности фиговое? Для каждой системы у тебя должна быть версия программы под неё.
py.user.nextЯ рад, что Вы наконец-то поняли природу моего беспойства.
Программа для разных систем отличается не только способом установки в них; очень часто и взаимодействие программы с этими системами различно.
py.user.nextНа верблюде, насколько я помню, это очень давно автоматизировано. А тут нет?
Например, в винде используется Ctrl+Z, а в лине Ctrl+D. И пользователю в одной системе нужно писать “нажми Ctrl+Z”, а в другой системе в том же месте надо писать “нажми Ctrl+D”. Это уже разный код самой программы.
Отредактировано ogogon (Ноя. 26, 2019 15:56:40)
Офлайн
857
ogogonТут есть и предпросмотр, и правка сообщений. Предпросмотр - зелёная галочка. Правка сообщения - надпись “Редактировать”. Всё, что криво выглядит, можно отредактировать, чтобы оно прямо выглядело
Кроме того, на форуме, по непонятным для меня причинам, нет опции предпросмотра написанного. Заранее прошу прощения, если будет выглядеть криво.

ogogonТо, что ты под 100500 систем собрался писать одну программу и ищешь серебрянную пулю/волшебную таблетку, которая все системы узнает и во всех них проверит наличие программ. А я тебе говорю: пиши для каждой системы свою версию программы, даже не сборку с учётом особенностей, а вообще ветку отдельную. Иначе ты будешь иметь проблемы, потому что системы сильно различаются на базовом уровне. Они даже файлы по-разному читают и пишут. И однажды файл, сделанный на одной системе, попадёт в другую систему. И из-за этого всё сломается, хотя программа твоя одна и та же.py.user.nextА что с ней не так?
Только при чём тут FreeBSD?
ogogonЭто всё должно быть записано в скриптах дистрибутива, который перед установкой всё это проверяет. И если у тебя одна операционная система, а не несколько, то в чём проблема прошерстить всё, опираясь на пакеты, установленные в системе? Ты можешь скриптом запросить через пакетный менеджер наличие того или иного пакета. И раньше для этого использовался скрипт configure. Сейчас же ты можешь свой скрипт накатать, который гораздо меньше и гораздо понятнее.
Конечно, можно тюнить свой скрипт под каждую платформу индивидуально, но я полагал, что есть некий модуль, позволяющей с учетом принятых путей и прочего узнать стоят ли в конкретной системе awk, sed и
что-то, что еще нужно.
ogogonЧто автоматизировано? Я тебе говорю про то, что ты сам пишешь в своей программе то или иное сообщение для пользователя. Он это действие выполняет и в каждой из систем оно вообще по-разному выполняется, при этом программа ведёт себя как будто одинаково.
На верблюде, насколько я помню, это очень давно автоматизировано. А тут нет?
Отредактировано py.user.next (Ноя. 26, 2019 16:17:03)
Офлайн
186
> вначале проверить, и убедиться в том, что нужные программы есть, и только потом начинать работу. Этого я и хочу.
Ну я же тебе написал про переменные окружения…
>>> import os >>> os.environ["PATH"].split(':') ['/usr/local/bin', '/usr/bin', '/bin', '/usr/local/games', '/usr/games', '/snap/bin']
Офлайн