LINUX.ORG.RU

Более кроссплатформенный скриптинг, чем Python

 , ,


0

3

Есть у меня набор скриптов, расшаренный между некоторым количеством хостов (разные юниксы, винда), в т.ч. есть крон-файл, который запускает эти скрипты. Сами скрипты написаны на питоне (100% кроссверсионно), кронтаб на винде через python-crontab, команды в кронтабе совместимы и с башем, и с cmd, всё работало как часы.

Недавно один из хостов проапгрейдили до последней версии Oracle Linux, в которой хипстеры удалили исполняемый python, оставив только python с явным указанием версии. В результате у меня начали агриться шебанги /usr/bin/env python. Для пользовательского шелла я сделал кастомную обёртку, которая определяет эту дебильную ситуацию и подставляет какой-нибудь существующий интерепретатор. Но, поскольку в кронтабе нет возможности переносимо указать окружение, хотя бы PATH (например, AIXовый кронтаб этого не умеет), то приходится изворачиваться и делать отдельный крон-файл конкретно для этого хоста.

Пробовал завести отдельный шелл-скрипт с нужным окружением, который можно будет сорсить или запускать с командой в качестве параметра, но что выбрать в качестве языка? Питон и так был самым кроссплатформенным способом.

Повершелл не подходит, он отсутствует на некоторых хостах. Perl тоже не предлагать, у него ещё больше проблем с шебангами.

UPD: Админских прав на этом хосте нет, поэтому в окружение, доступное кронтабу по умолчанию, ничего положить нельзя.

Есть ли более удобные способы решения этой проблемы?

UPD: Пока лучший вариант - bat/sh скрипт из первого коммента:

:<<@exit/b
   @echo Windows stuff
@exit/b
   echo Unix stuff
★★★

в которой хипстеры удалили исполняемый python

Всё для людей. Вот тебе и ответ. Какое бы решение ты не нашёл, через некоторое время найдётся хипстер, который всё «починит».

anonymous ()
Ответ на: комментарий от E

пользовательское окружение недоступно

Вопрос: при непосредственном указании «исполнителя» усё работает? Например:

python2 script.py

Если да, то нужно нечто, запускающее твои скрипты именно в таком виде.

anonymous ()
Ответ на: комментарий от anonymous

На некоторых хостах отсутствует python2, есть только python, иначе проблемы бы не стояло.

На винде вот есть py, который об этом всём самостоятельно заботится, на стороне линукса почему-то такого универсального раннера нет.

E ★★★ ()
Ответ на: комментарий от E

на стороне линукса почему-то такого универсального раннера нет

См. в сторону https://github.com/pts/pdfsizeopt . Тут интересный финт применён. Прибавь к этому тот финт, что в начале топа обговаривался и получишь «щастье». Но всё равно найдётся хипстер, который всё «починит».

anonymous ()

UPD: Админских прав на этом хосте нет, поэтому в окружение, доступное кронтабу по умолчанию, ничего положить нельзя.

Есть ли более удобные способы решения этой проблемы?

Вали эту проблему тому, у кого админские права есть. А он пускай решает хоть как «оракл лучше знает», хоть по другому.

anonymous ()
Ответ на: комментарий от anonymous

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

jtad ()

Есть ли более удобные способы решения этой проблемы?

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

anonymous ()
Ответ на: комментарий от jtad

Попробуй такое прочитать без поллитры

Если ты пишешь для себя, то нет необходимости в поллитре. А если кому-то, то тут нет разницы на чем, все равно не поймет нюансов, которые есть везде, и они понятны только в процессе написания и отладки.

anonymous ()
Ответ на: комментарий от anonymous

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

jtad ()
Последнее исправление: jtad (всего исправлений: 2)
Ответ на: комментарий от jtad

так а кто пишет на повершелл для себя?

Я пишу только для себя… Я не админ и вообще не работаю, пенсионер. Мне пош более знаком и кажется логичным и читаемым. Про питон я вообще молчу, никогда и не знал его, ибо никогда не был связан хоть с какой-либо разработкой ПО, а баш успешно забыл после 15-летнего перерыва, впрочем, как и батники, как только перешел на повершелл. Я не утверждаю, что лучше или хуже. Для меня этот вопрос решенный.

anonymous ()
Ответ на: комментарий от lovesan

Ну, всё, теперь это точно каминаут, Капитан Вантуз!

Можешь больше не рассказывать как хорошо сисярпы под линуксом работают, всё равно тебе никто не поверит. Ты-то под масдайкой это и пишешь, и запускаешь.

WitcherGeralt ★★ ()
Ответ на: комментарий от anonymous

2005?

Ну да, где-то в это время, может и позже, вернулся на винду. Сначала была слака, потом зенволк. Года три наверное пользовался.

Забыл или не знал вообще?

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

anonymous ()

Я бы лично в этой ситуации использовал портабельный шебанг #!/bin/sh и вставку из шелл-кода, которая отыскивает пригодный питон, и уже с ним запускает настоящий скрипт.

d_a ★★★★★ ()

Насколько я знаю питон скрипт можно упаковать в исполняемый файл со всеми библиотеками и ему будет пофиг что на хосте

Правда жирный будет

ism ★★★ ()
Ответ на: комментарий от E

Теперь python конфигурируется через alternatives [0].

# alternatives --config python

В списке должены быть no-python, python2, python3. По-умолчанию, no-python. Выбираешь python2, и у тебя /usr/bin/python показывает на python2:

# python -V
Python 2.7.16

Скажи своим админам.

[0] https://developers.redhat.com/blog/2019/05/07/what-no-python-in-red-hat-enterprise-linux-8/

rupert ★★★★★ ()
Последнее исправление: rupert (всего исправлений: 1)

В результате у меня начали агриться шебанги /usr/bin/env python.

а с каких пор python == python2 == python3, извините? ты специально писал что бы запускалось и под 2 и под 3 ?

сколько у тебя пакетов из pip юзается, кстати? это же боль…

zendrz ()