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
★★★

Последнее исправление: E (всего исправлений: 5)

на питоне (100% кроссверсионно)

Уверен? Версия то пайтона какая? 2.5 чтоле?

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

Это я видел, но оставил на самый крайний случай, это же адский изврат :)

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

Версия то пайтона какая?

2.6, 2.7, 3.5, 3.6, 3.7, 3.8

Некоторые скрипты и под 2.5 работают.

(есть даже пара скриптов для jython, где до сих пор 2.2)

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

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

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

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

Админских прав нет, а админы не хотят альтернативы устанавливать, потому что «оракл знает лучше».

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

В кронтабе пользовательское окружение недоступно по умолчанию, так-то враппер у меня уже есть. В ОПе об этом упомянуто.

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

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

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

python2 script.py

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

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

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

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

E ★★★
() автор топика

Объявляешь py2 мёртвым, меняешь шебанг на /usr/bin/env python3, готово.

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

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

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

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

Финт интересный, запомнил, спасибо. Но это всё равно крайний случай.

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

А «оно» вообще как работает то?

Не знаю, как в нем remoting, а локально замечательно. Использую, как основной шелл в (он|офф)топике.

anonymous
()

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

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

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

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

повершелл для восприятия в разы хуже чем питон. Или есть аргументы в ее пользу?

Личные неприязнь Лавсана к пайфону и привязанность к дотнету 😉.

Virtuos86 ★★★★★
()

Тред не читай, сразу отвечай! perl уже предлагали?

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

повершелл для восприятия в разы хуже чем питон. Или есть аргументы в ее пользу?

А как сравнить? Для этого необходимо хорошо знать и то и другое.

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

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

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

Если что, в кронтабе можно добавить с начала строки PATH

Это, к сожалению, невалидный синтаксис для виндового cmd.

E ★★★
() автор топика

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

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

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

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

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

anonymous
()

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

#!/bin/sh пожалуй наиболее кросплатформенен.

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

Это, к сожалению, невалидный синтаксис для виндового cmd.

А MSYS куда делся?

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

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

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

кмк, в такой ситуации лучше всего себя покажет golang.

golang не совсем не про скриптинг (хотя и есть gorun), но зато всё нужное носит с собой в одном файле

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

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

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

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

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

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

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

забыл после 15-летнего перерыва

2005? Забыл или не знал вообще? Где ты с ним в 2000-х пересёкся, пенсионер?

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

Posix shell не подходит потому что Windows, так?

Но ведь оно там давно есть…

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

2005?

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

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

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

anonymous
()

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

d_a ★★★★★
()

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

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

ism ★★★
()

Lua/LuaJIT, если скрипты не очень мудреные.

anonymous
()

python2 мёртв

/thread

anonymous
()
Ответ на: комментарий от 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 ★★
()

sed -i '1 s/python$/python3/' nabor_skriptov/*.py ? Можно запускать по inotifywait.

anonymous
()

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

Racket конечно же.

Hertz ★★★★★
()

В винде из коробки нет питона. Как он может быть кроссплатформенным? В линуксе аналогично с повершелл, тоже отпадает. Значит что-то, что есть и там и этам.

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

В винде из коробки нет питона. Как он может быть кроссплатформенным?

Во многих дистрибутивах GNU/Linux тоже. И чего?

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

golang не совсем не про скриптинг (хотя и есть gorun), но зато всё нужное носит с собой в одном файле

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

E ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.