Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 26, 2019 01:23:36

ogogon
Зарегистрирован: 2018-10-25
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка установки программы в системе и ее нахождение

Коллеги, подскажите, пожалуйста!

Если я пишу программу для автоматизации, то мне важно найти в системе установленные программы, для того чтобы обращаться к ним. Полагаю, что простой поиск файла по имени может давать неоднозначные результаты. Нужно учитывать типовые пути поиска исполняемых программ для конкретной системы и это не очень переносимая задача.

Есть ли готовое решение для этого? (Во FreeBSD для таких задач есть команда whereis. в Линуксе - не знаю.)
Наверняка, для змеюки сделали такой модуль. Это весьма распространенная задача.

Ogogon.



Властитель слабый и лукавый, плешивый щеголь, враг труда,
Нечаянно пригретый славой, над нами царствовал тогда!

Офлайн

#2 Ноя. 26, 2019 07:20:09

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Проверка установки программы в системе и ее нахождение

ogogon
Если я пишу программу для автоматизации
Тогда вам важно посмотреть на https://www.docker.com/, https://www.ansible.com/, https://www.saltstack.com/
и ответить что вас не устраивает в готовых системах.

ogogon
Наверняка, для змеюки сделали такой модуль. Это весьма распространенная задача.

Я такого модуля не знаю. А кому он нужен? Если subprocess выполняет команду то ок, зачем мне знать как он это делает? Если не получилось будет исключение. Проверка именно установленности это дело пакетного менеджера dpkg, pacman, yum и тут все системно-зависимо.

Вообще управлять системой в которой чтото кудато неизвестно как установлено идея помоему порочная и обреченная на провал.



Офлайн

#3 Ноя. 26, 2019 10:04:28

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Проверка установки программы в системе и ее нахождение

> мне важно найти в системе установленные программы, для того чтобы обращаться к ним.

Что означает “обратиться”? Если нужно выполнить программу, то os.execvp / subprocess самостоятельно могут найти путь к исполняемому файлу по информации из переменных окружения.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Ноя. 26, 2019 11:52:49

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10024
Репутация: +  857  -
Профиль   Отправить e-mail  

Проверка установки программы в системе и ее нахождение

ogogon
Во FreeBSD для таких задач есть команда whereis. в Линуксе - не знаю.
В Linux тоже есть whereis
[guest@localhost ~]$ .rpmf `which whereis`
util-linux-2.29.1-2.fc26.x86_64
[guest@localhost ~]$

ogogon
Если я пишу программу для автоматизации, то мне важно найти в системе установленные программы, для того чтобы обращаться к ним.
Во всех крупных программах эти пути сначала отыскиваются по известным местам, а потом настраиваются/перенастраиваются пользователем.

Только при чём тут FreeBSD? Неужто ты пишешь кросс-системную программу по типу швейцарского ножа, в котором есть всё, только всё по отдельности фиговое? Для каждой системы у тебя должна быть версия программы под неё. Программа для разных систем отличается не только способом установки в них; очень часто и взаимодействие программы с этими системами различно.

Например, в винде используется Ctrl+Z, а в лине Ctrl+D. И пользователю в одной системе нужно писать “нажми Ctrl+Z”, а в другой системе в том же месте надо писать “нажми Ctrl+D”. Это уже разный код самой программы.



Отредактировано py.user.next (Ноя. 26, 2019 11:53:47)

Офлайн

#5 Ноя. 26, 2019 15:54:01

ogogon
Зарегистрирован: 2018-10-25
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка установки программы в системе и ее нахождение

Я благодарю за ответы, хотя несколько жаль, что они, увы, не по сути моего вопроса.
Тем не менее, я сделаю несколько реплик, хотя сразу же попрошу не переводить их в нетематические дискуссии, тем более эмоциональные.
Кроме того, на форуме, по непонятным для меня причинам, нет опции предпросмотра написанного. Заранее прошу прощения, если будет выглядеть криво.

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
Программа для разных систем отличается не только способом установки в них; очень часто и взаимодействие программы с этими системами различно.
Я рад, что Вы наконец-то поняли природу моего беспойства.
Конечно, можно тюнить свой скрипт под каждую платформу индивидуально, но я полагал, что есть некий модуль, позволяющей с учетом принятых путей и прочего узнать стоят ли в конкретной системе awk, sed и
что-то, что еще нужно.

py.user.next
Например, в винде используется Ctrl+Z, а в лине Ctrl+D. И пользователю в одной системе нужно писать “нажми Ctrl+Z”, а в другой системе в том же месте надо писать “нажми Ctrl+D”. Это уже разный код самой программы.
На верблюде, насколько я помню, это очень давно автоматизировано. А тут нет?

Ogogon.



Властитель слабый и лукавый, плешивый щеголь, враг труда,
Нечаянно пригретый славой, над нами царствовал тогда!

Отредактировано ogogon (Ноя. 26, 2019 15:56:40)

Офлайн

#6 Ноя. 26, 2019 16:15:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10024
Репутация: +  857  -
Профиль   Отправить e-mail  

Проверка установки программы в системе и ее нахождение

ogogon
Кроме того, на форуме, по непонятным для меня причинам, нет опции предпросмотра написанного. Заранее прошу прощения, если будет выглядеть криво.
Тут есть и предпросмотр, и правка сообщений. Предпросмотр - зелёная галочка. Правка сообщения - надпись “Редактировать”. Всё, что криво выглядит, можно отредактировать, чтобы оно прямо выглядело

ogogon
py.user.next
Только при чём тут FreeBSD?
А что с ней не так?
То, что ты под 100500 систем собрался писать одну программу и ищешь серебрянную пулю/волшебную таблетку, которая все системы узнает и во всех них проверит наличие программ. А я тебе говорю: пиши для каждой системы свою версию программы, даже не сборку с учётом особенностей, а вообще ветку отдельную. Иначе ты будешь иметь проблемы, потому что системы сильно различаются на базовом уровне. Они даже файлы по-разному читают и пишут. И однажды файл, сделанный на одной системе, попадёт в другую систему. И из-за этого всё сломается, хотя программа твоя одна и та же.

ogogon
Конечно, можно тюнить свой скрипт под каждую платформу индивидуально, но я полагал, что есть некий модуль, позволяющей с учетом принятых путей и прочего узнать стоят ли в конкретной системе awk, sed и
что-то, что еще нужно.
Это всё должно быть записано в скриптах дистрибутива, который перед установкой всё это проверяет. И если у тебя одна операционная система, а не несколько, то в чём проблема прошерстить всё, опираясь на пакеты, установленные в системе? Ты можешь скриптом запросить через пакетный менеджер наличие того или иного пакета. И раньше для этого использовался скрипт configure. Сейчас же ты можешь свой скрипт накатать, который гораздо меньше и гораздо понятнее.

ogogon
На верблюде, насколько я помню, это очень давно автоматизировано. А тут нет?
Что автоматизировано? Я тебе говорю про то, что ты сам пишешь в своей программе то или иное сообщение для пользователя. Он это действие выполняет и в каждой из систем оно вообще по-разному выполняется, при этом программа ведёт себя как будто одинаково.



Отредактировано py.user.next (Ноя. 26, 2019 16:17:03)

Офлайн

#7 Ноя. 26, 2019 20:13:27

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Проверка установки программы в системе и ее нахождение

> вначале проверить, и убедиться в том, что нужные программы есть, и только потом начинать работу. Этого я и хочу.

Ну я же тебе написал про переменные окружения…

 >>> import os
>>> os.environ["PATH"].split(':')
['/usr/local/bin', '/usr/bin', '/bin', '/usr/local/games', '/usr/games', '/snap/bin']



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version