Какие скрипты не следует переносить с bash на python?

1

Я решил переписать все наши скрипты Bash в Python (их не так много) в качестве моего первого проекта Python. Причиной этого является то, что, хотя я довольно свободно владею Bash, я чувствую, что это несколько архаичный язык, и поскольку наша система находится на первых этапах своих разработок, я думаю, что теперь переключение на Python будет правильным.

Существуют ли сценарии, которые всегда должны быть написаны в Bash? Например, у нас есть демон init.d script - это нормально использовать Python для него? Мы запускаем CentOS.

Спасибо.

  • 2
    Я бы возразил против характеристики, что Баш является «архаичным». То, что что-то уже давно существует, не делает его менее ценным или анахроничным. Хотя я люблю Ruby, например, я бы почти никогда не думал, что это правильный инструмент для работы сценариев запуска системы, учитывая, что хрупкая зависимость от гемов может заставить все взлететь до небес. Придерживайтесь Bash, где это уместно.
  • 0
    Я полностью согласен с Джоном; Кроме того, я хотел бы отметить, что Bash все еще разрабатывается, включая дополнения к возможностям сценариев. Посмотрите журнал изменений: tiswww.case.edu/php/chet/bash/NEWS
Теги:
scripting

4 ответа

3
Лучший ответ

Это нормально в том смысле, что вы можете это сделать. Но для сценариев в /etc/init.d обычно необходимо загружать конфигурационные данные и некоторые функции (например, чтобы напечатать приятный зеленый OK на консоли), который будет сложно подражать на Python.

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

  • 0
    +1 (точный ответ)
2

Как правило, скрипты в файле /etc/init.d записываются в "родной оболочке" ОС (например, bash, sh, posix-sh и т.д.). Это особенно справедливо для сценариев, которые будут выполняться на более низких уровнях инициализации (например, не каждый каталог будет монтироваться в однопользовательском режиме, в том числе там, где может быть установлен python или библиотеки сайтов).

Большинство ОС предоставляют некоторые "вспомогательные функции", которые упрощают создание сценариев написания в некоторой родной оболочке. Эти скрипты определяют определенные коды возврата и сообщения, которые требуются/желательны при написании служебных скриптов. О системах на основе RedHat см.:

/etc/init.d/functions 

Кроме того, служебные скрипты в файле /etc/init.d могут быть записаны на любом языке (включая скомпилированные языки). Синтаксис общего вызова должен поддерживаться. Обычно есть три аргумента, которые необходимо поддерживать: start, stop и status. Некоторые дополнительные аргументы могут быть уместны, в зависимости от цели скриптов.

% /etc/init.d/foo (start|stop|status)  
  • 1
    +1 за указание на то, что Python может быть недоступен во время загрузки, за упоминание функций оболочки сценария инициализации и за объяснение требований к сценариям инициализации. Во многих системах POSIX Python устанавливается ниже / usr /, который может находиться в отдельном разделе. Другим примером библиотеки функций сценария инициализации является / lib / lsb / init-functions из стандартной базы Linux, которая доступна в Debian, Ubuntu, SUSE и, возможно, во многих других системах Linux.
1

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

И все, что они сказали выше, о том, что Python относительно тяжеловесен и не обязательно доступен, когда это необходимо.

0

Некоторые сценарии, которые я пишу, просто включают в себя цикл в glob в некоторых каталогах, а затем выполняют некоторую последовательность команд на них. В python этот процесс гораздо более утомительный.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню