Я решил переписать все наши скрипты Bash в Python (их не так много) в качестве моего первого проекта Python. Причиной этого является то, что, хотя я довольно свободно владею Bash, я чувствую, что это несколько архаичный язык, и поскольку наша система находится на первых этапах своих разработок, я думаю, что теперь переключение на Python будет правильным.
Существуют ли сценарии, которые всегда должны быть написаны в Bash? Например, у нас есть демон init.d script - это нормально использовать Python для него? Мы запускаем CentOS.
Спасибо.
Это нормально в том смысле, что вы можете это сделать. Но для сценариев в /etc/init.d
обычно необходимо загружать конфигурационные данные и некоторые функции (например, чтобы напечатать приятный зеленый OK
на консоли), который будет сложно подражать на Python.
Поэтому попробуйте преобразовать те, которые имеют смысл (т.е. те, которые содержат сложную логику). Если вам требуется управление заданиями (процессы запуска/остановки), то bash лучше подходит, чем Python.
Как правило, скрипты в файле /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)
У каждой задачи есть языки, которые лучше подходят для нее, и тем более. Замена обратной цитаты sh
довольно сложна в Python, так как это будет мириады цитат, просто чтобы назвать пару. Есть, вероятно, лучшие проекты, чтобы вырезать зубы.
И все, что они сказали выше, о том, что Python относительно тяжеловесен и не обязательно доступен, когда это необходимо.
Некоторые сценарии, которые я пишу, просто включают в себя цикл в glob в некоторых каталогах, а затем выполняют некоторую последовательность команд на них. В python этот процесс гораздо более утомительный.