LINUX.ORG.RU

Что лучше использовать: питон или баш?

 , ,


1

2

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

Для системных скриптов

Лучше баш, ибо пистон каждый год ломают всё больше.

Будешь только и делать, что переписывать скрипты и обновлять пистон.

Novator ★★★★★ ()
Последнее исправление: Novator (всего исправлений: 3)
Ответ на: комментарий от Deleted

Проверки, о которых пишет ТС, что на баше, что на питоне представляют собой однострочники вида

if [ -f /path/to/file ]; then
...
if Path('/path/to/file').is_file():
...

И это если не сокращать баш до && и || в одной строке.K

anonymous ()

Путь первый. Выучиваешь Bash по тому же Advanced Bash Scripting Guide. Устаешь молотить данные сторонними утилитами с бесконечным ворохом разнородных параметров. Идешь учить Python.

Путь второй. Выучиваешь Python по паре-тройке онлайн-курсов. Устаешь дергать разнородные библиотеки или сочинять громоздкие вызовы внешних утилит для примитивнейших операций. Идешь учить Bash.

Конечный итог. Ты знаешь Bash и Python и выбираешь инструмент под задачу вместо «я тебя слепила из того, что было».

Bagrov ★★★★★ ()
Ответ на: комментарий от Deleted
if cp a b; then
....

А ещё есть set -euo pipefail, но с ним которые привычки ломаются.

legolegs ★★★★★ ()

Для работы с запуском программ и с файлами - однозначно баш лучше. Есть всякие правила, которые надо соблюдать - про кавычки вокруг аргументов например. Но и в питоне те-же самые проблемы, если использовать тот вариант subprocess, который принимает строку, а не список (не надо его использовать).

legolegs ★★★★★ ()

Начни на баше. После первого rm -rf $dir/* когда dir внезапно окажется неопределенным - переходи на питон.

anonymous ()

Лучше использовать то, что лучше знаешь. Мне проще на шелле наговнокодить и использовать с уверенностью, что заработает везде, даже где нет питона. Часть мелкой фигни у меня используется на домашнем сервере, на нём питона нет, потому что его ничего не тянет и он не нужен. Хотя изначально была даже мысля таскать со скриптами статичную сборку микропитона.

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

Для работы с запуском программ и с файлами - однозначно баш лучше.

Вот тут однозначно плюс. Меньше эболы с вызовом внешних утилит и получения их кодов возврата.

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

На баше очень муторно писать всякие проверки и всё такое

Да с хера ли. [ -x /tools/getstat ] && /tools/getstat -ololo как будет выглядеть на питоне?

// Я питон люблю, но он однозначно не для всяких мелких скриптов.

IPR ★★★★★ ()

Очевидно python.

а) Проще поддерживать, в том числе когда ты уйдешь из конторы.

б) Байки про несовместимость - байки. Любой инфрушный скрипт написанный на python 3 взлетит на любом python 3 (если автор сознательно не упарывался). Аналогично в рамках 2ой версии.

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

Есть всякие правила, которые надо соблюдать

Проблема зачастую в том, что вместо понимания как программировать на языке, пытаются выработать «привычки». Чем такая привычка поможет когда надо вызвать: $PRG $add_arguments, где и первая и вторая переменные явно содержат аргументы через пробелы с вашей «привычкой», где «явно» натурально обозначает «сформировано специально с учётом отсутствия спецэффектов»?

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

Ох, я же не запрещаю никому включать голову и RTFM.

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

На баше очень муторно писать всякие проверки и всё такое

а с хера ли. [ -x /tools/getstat ] && /tools/getstat -ololo как будет выглядеть на питоне?

На питоне это будет выглядеть читаемо.

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

На питоне это будет выглядеть читаемо.

Ждём пример.

IPR ★★★★★ ()

bash

Питон только если у тебя там начинается логика с массивами, обработкой JSON, CSV, и другая дичь, для которой в питоне спец. библиотека есть, а в bash приходится километры регулярок городить или доп. утилиты устанавливать. Но это исключения.

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

[quote]Лучше баш, ибо пистон каждый год ломают всё больше.[/quote]

Мсье хипстер, который строго пишет на самом последней версии и в обязательном порядке использует новые фичи?

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

А проверки завершения вызываемых утилит?

toolza || exit 1

Куда уж короче. А хотя да, -e в шебанг добавить короче.

d_a ★★★★★ ()

универсальній рецепт - если количество строк в баш скрипте перевалило за 100 - пора перейти на пайтон.

И да, 100 нормальніх строк, с человеческим синтаксисом. А не лепить все в одну.

PunkoIvan ★★★★ ()

Ужо устал везде повторять: для группировки вместе шелл команд, которые чато исполняешь, используешь шелл скрипт. Для написания программы, используешь язык программирования, например питон.

yvv ★★☆ ()

Python - только если планируешь городить и обрабатывать структуры данных сложнее одномерного ассоциативного массива строк, или если нужна тонкая работа с XML и прочими непростыми форматами или БД.
Во всех остальных случаях - Bash.

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

обработкой JSON

Для JSON есть jq, для CSV и прочего text/plain есть (g)awk, но это на любителя. Большая часть доп. утилит уже встречается в большинстве систем или легко добавляется.

blexey ★★★★★ ()

куча сабпроцесов для вызова системных утилит

Это в баше. В питоне наоборот, можно дёргать библиотеки.

anonymous ()

Кстати, никто не вбросил Жемчужину мира программирования. Непорядок.

Deleted ()

Зависит от сложности скриптов. Если простые, bash лучше почти всегда. Если сложные, то Python. Если ты знаешь Python, то bash для скриптов можно забыть. Если ты сисадмин, то bash надо знать в любом случае, а Python опционален.

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

Не любой. Я вот сознательно фичи 3.7 юзал, т.к. они мне кровь сохраняли при работе с csv, а именно упорядоченные из коробки словари. Но вот более ранняя версия будет работать на более позднем питоне кроме случаев перехода с 2 на 3 и с 3 на 4, если его когда-нибудь сделают.

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

Если ты сисадмин, то bash надо знать в любом случае

Нет, баш вообще не нужен при наличии питона. Требование тут только от работодателя может быть, или чтобы читать уже имеющиеся скрипты.

anonymous ()

Выполнить n команд подряд - bash. Всё остальное - питон.

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

сформировано специально с учётом отсутствия спецэффектов

Famous last words

Именно так. Если я пишу add_args='f*' , то я хочу получить для $PRG='ls -l' вывод ls -l f* , а не ls -l "f*" . Если кто-то возьмёт и исправит на $(rm *) - это его трудности. Ибо продолжая логику — вообще тогда программить нельзя, удалить всё можно в том числе хоть и на питоне.

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

или чтобы читать уже имеющиеся скрипты

да. Именно по этому надо знать.

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

Года 3 юзаю как основной шелл, также скриптую на нем все, что могу (большую часть рабочего, увы, не могу).

Есть даже видео, как я его воспеваю: https://www.youtube.com/watch?v=ZDhfpqRnpwI

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

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

cPunk ★★ ()

Не выёживайся и пиши на перле. Проверенный временем и стабильный вариант.

Princesska ★★★★ ()

Для системных скриптов

В FreeBSD используется POSIX Shell, всё прекрасно работает (но без тяжёлых наркотиков туда лучше не смотреть).

скриптов бекапа и прочего

У меня куча скриптоты для бэкапа, удалённого бэкапа, билд-ферма на POSIX Shell, всё прекрасно работает (но туда лучше не лезть без тяжёлых наркотиков, я упорот не менее, чем апстрим FreeBSD).

bash

Вообще плохая практика.

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