LINUX.ORG.RU

Perl и Python как scripting languages

 , ,


1

3

С наступившим господа :)!

Я сисадмин, который доучивается до DevOps, чтобы сменить профиль деятельности. В текущий момент устраняю пробелы в своих знаниях, чтобы соответствовать новой профессии и параллельно ищу работу.

Смотря вакансии, очень часто вижу в них требования знания python для scripting. Так сложилось, что я в своей работе использовал perl и bash, и мне их всегда хватало и учить что-то другое вроде как и не требовалось.

Сейчас, как я понимаю, perl устарел и неким стандартом является python для такого рода задач. Ну раз требуется, я быстренько накатил этот python и посмотрев пару youtube видео о каких-то элементарных вещах, перешел к делу. За вечер я переписал несколько своих рабочих perl скриптов на python. (ничего особенно сложного, работа с mysql, обработка текстовых файлов, бекапы и т.п.)

python мне показался вполне дружелюбным, немного другой синтаксис, пожалуй более удобный, более богатый инструментарий, многое делается проще чем на perl. Где-то наоборот как-то мудрено сделано (например при работе с mysql). Но в целом, все оказалось не сложно и я могу точно также использовать python как perl (для моих задач).

Вопрос, я что-то упустил или переход от одного языка к другому, это что-то, что требует пары вечеров?

python мне показался вполне дружелюбным, немного другой синтаксис, пожалуй более удобный, более богатый инструментарий, многое делается проще чем на perl.

Похоже ты ни то, ни другое толком не изучил

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

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

samson_b ()

я могу точно также использовать python как perl (для моих задач).

«программист на фортране может писать программы на фортране на любом языке»

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

Да и много чего еще можно перечислить: регулярки менее фичастые и не встроены в язык, лямбд полноценных нет, и т.д. и т.п. Так что если пытаться «использовать python как perl», получется довольный хреновенький перл.

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

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

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

По ходу дела меня не совсем поняли. Я не пытаюсь сравнить два языка и сказать, что вот этот лучше/хуже другого. Я лишь хотел сказать, что потенциальные работодатели хотят видеть python в резюме devops. Я переписал несколько своих скриптов с perl на python, мне показалось это не сложно. Я ни в коем случае не считаю себя программистом, скрипты использую как вспомогательный инструмент для автоматизации.

Вот простой пример, скрипт удаляет из mysql базы записи старше 183 дней, оптимизирует таблицу и удаляет старые файлы бекапов.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
##############################################################################

from datetime import datetime, timedelta
dt_past = datetime.now() - timedelta(183)
date_str = dt_past.strftime("%Y-%m-%d")

import mysql.connector
from mysql.connector import errorcode
try:
    cnx = mysql.connector.connect(user='traff', password='****',
                                  host='localhost', database='traff')
except mysql.connector.Error as err:
    import sys
    sys.exit(err)

cursor = cnx.cursor(buffered=True)
cursor.execute("delete from traff where date<'" + date_str + "';")
cursor.execute("optimize table traff;")
cnx.commit()
cursor.close()
cnx.close()

import os
import re

for root, dirs, files in os.walk("/usr/local/mybilling/backup"):
    for filename in files:
        result = re.search('[0-9\-]{10}', filename)
        if result.group(0)<date_str:
             os.remove("/usr/local/mybilling/backup/" + filename)
Что плохо написал?

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

Учи go. И пили патчи в кубернетосы.

В основном у работодателей запрос на AWS, там где требования повыше - хотят чтобы умел infrastructure as code (cloudformation и terraform).Требования к знанию go очень редко встречаются. Азы k8s освоил, на AWS architect associate сертификат экзамен сдал.

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

или переход от одного языка к другому, это что-то, что требует пары вечеров?

В целом это так и есть, для практически всех мейнстримных языков. В принципе это верно даже для некоторых немейстримных. Например, Common Lisp также можно выучить за пару вечеров если есть опыт с другими аппликативными языками, особенно с динамической типизацией, ооп и прочим подобным, чего щас навалом.

Сложности начинаются с языками у которых модель вычисления сильно отличается от «обычной»(т.е. аппликативной) - например Haskell это уже не так просто.

Языки с зависимыми типами, вроде Coq, вообще могут основательно сломать мозг.

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

lovesan ★☆ ()

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

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

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

Я не считаю его легким, просто я вижу, что те задачи, что я решал на perl, я также могу решить на python, единственное это занимает больше времени, т.к. приходится гуглить типовые решение.

Ну и следовательно python можно добавить в резюме, т.к. несложные скрипты я написать смогу.

Спасибо всем за ответы, картина более-менее понятна.

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

Всё, что нужно знать о самообразовании.

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

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

знаешь как скопипастить кусок скрипта с SO

Без этого никуда. Вот как-то один раз искал, как что-то сделать. Ссылка на SO с ответом. Кликаю - SO, блин, лежит. Что делать? Google cache!

rupert ★★★★ ()

Python современная лингваФранко

и как пиджин для «неумытых» масс - за последние 70 лет с учётом падения среднего уровня граммотности среди пользователей вт - лучше языка для формулирования что нужно пока нет.

были(есть) электронные таблицы - но отсутствие общезначимого языка в этой области привело к тому что ща (тут разные модные названия) как библиотеки для python заняли во многом поляну первых 101 мили при обращение с «большими» данными

qulinxao3 ()

Поучи asyncio/multiprocessing/threading, велика вероятность необходимости параллельной обработки инфы. Попиши модули для Ansible, девмопсы его любят. Посмотри на интеграцию с AWS/Azure SDK, есть питоньи варианты.

А так сейчас даже для самой простой задачи мопсы Go пытаются притянуть, молодежно же.

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

переход от одного языка к другому, это что-то, что требует пары вечеров

Для мелкого скриптинга - да. Потому что для этого нужно знать основы программирования и уметь загуглить примеры.

no-such-file ★★★★★ ()

У тебя слишком простой скрипт в примере.

Так в принципе всё верно, скрипты писать не важно на чём и синтаксис у питона проще, поэтому переходить на него удобнее.

Но есть общие темы, такие как логирование(logging), работа с параметрами(argparse, configparser), работа с json и yaml, работа с REST API(requests), понимание которых подразумевается при devops-работе. Одним os.walk не обойдёшься.

Плюс надо понимать базовые принципы ООП и не делать круглые глаза увидев class в скрипте.

Ну и про мелкие фишечки питона недавно был тред. Посмотри для самопроверки Проба на Python

alpha ★★★★★ ()

Вопрос, я что-то упустил или переход от одного языка к другому, это что-то, что требует пары вечеров?

Ну базовые конструкции во всех императивных языках более-менее одинаковы, обёртки над POSIX и библиотечными (mysql) вызовами тоже, так что если писать элементарные вещи, то разница будет только в (отсутствии) необходимости писать $ и скобки, и это действительно можно запомнить за вечер.

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

slovazap ★★★★★ ()

Питон вообще сделан для того, чтобы ему можно было быстро обучить обезьяну.
По поводу «perl устарел» - то это в корне неверно. Особенно, если используешь его как собственный инструмент. Для админской деятельности однострочники им - очень даже.

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

потенциальные работодатели хотят видеть python в резюме devops

Они хотят обычно хоть какой-то ЯП видеть в резюме. Выше вон кто-то написал, что для твоей «задачи» достаточно баша. А нормальный язык программирования желательно знать тот, на котором пишет потенциальный работодатель. Впрочем, ты тоже прав, за неделю можно любой ЯП подтянуть до уровня, достаточного для девапса.

generator ★★★ ()

Python - такое сборище хаков какое не снилось ни одному языку

Делим на две строки по разделителю

JS

items = string.split('=', 2)

Perl

@items = split('=', $string, 2);

Python

items = string.split('=', 1)

почему 1? гладиолус!

Python - язык предназначенный для удобной печати стектрейсов. стектрейсы в питоне может генерировать даже оператор присваивания:


def split_kv(string):
   if isinstance(string, str):
      key, value = string.split('=', 1)
      # Что-то поделаем с key, value

но в неожиданных местах исключения не бросает


'1' + 1 # Исключение
1 + True # нет исключения

a = [1,2,3]
a[4] # исключение
a[4:5] # нет исключения

В третьем питоне выпилили из стандартной библиотеки… сортировку с компаратором! Стыдоба!

с чего начинается сортировка в любом языке? с компаратора. Дальше любые языки могут предоставить свои варианты компаратора.

в Питоне 3 идиоты выбросили компаратор. Зачем он нужен?

а в документации написали, если Вам всё ж таки нужен компаратор, напишите вот такой вот класс (выдержка из питонячей документации):

def cmp_to_key(mycmp):
    'Convert a cmp= function into a key= function'
    class K:
        def __init__(self, obj, *args):
            self.obj = obj
        def __lt__(self, other):
            return mycmp(self.obj, other.obj) < 0
        def __gt__(self, other):
            return mycmp(self.obj, other.obj) > 0
        def __eq__(self, other):
            return mycmp(self.obj, other.obj) == 0
        def __le__(self, other):
            return mycmp(self.obj, other.obj) <= 0
        def __ge__(self, other):
            return mycmp(self.obj, other.obj) >= 0
        def __ne__(self, other):
            return mycmp(self.obj, other.obj) != 0
    return K

Стыдоба! То есть если нужна сортировка с компаратором (типовое обращение к sort) то нужно удвоить затраты по памяти (поскольку копирование элементов в массив) и использовать классы о 7 методах.

жесть

PS: в питоне 3.2 сунули этот класс в «стандартную библиотеку»

и так у Питона всё!

версии библиотек в стандартной библиотеке между минорными релизами вполне себе могут быть обратно несовместимыми.

особо в обратной несовместимости усердствует этот как его Андрей Светлов. Пишешь ему в тикете на гитхабе вопрос «ты что - идиот?» он тебя банит!

ООП в Python - жесть, после перлового Mouse хочется повеситься как жутко. Всё реализовано хаками (с глюками).

Асинхронщину сделали идиоты через ж. Вместо того чтобы хранить стейт в Task.current хранят в контексте async функции. Из за этого реиспользовать старый синхронный код в асинхронной среде нельзя. Нужно переписать ВЕСЬ код чтобы он стал асинхронным.

Развесистая разлапистая система исключений. А чтобы например вытащить стектрейс - то он берется не из исключения, а… из тумбочки (sys.exc_info). super() тоже из тумбочки берёт self и мету родителей. жесть

вообще работа с self - вся на хаках построена


foo = Foo(...)

foo.bar(bla)   # метод bar получит self
getattr(foo, 'bar')(bla)   # bar тоже получит self, ха!

асинхронная библиотека вместо того чтобы дать левел работы с сокетами - просит какую-то фабрику классов протокола. и пореализовать традиционные Unix техники работы с сокетами - приходится извращаться…

ну и так далее.

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

Ну и следовательно python можно добавить в резюме, т.к. несложные скрипты я написать смогу.

Главное, чтобы при этом работодатель не решил, что тебя можно посадить допиливать кастомную фичу в проекте типа sssd :)

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

Главное, чтобы при этом работодатель не решил, что тебя можно посадить допиливать кастомную фичу в проекте типа sssd :)

Я смотрю, что в вакансии пишет работодатель, некоторым действительно нужны разработчики, которые умеют админить облака. Т.е. это типа два в одном - developer и devops, у таких обычно особое внимание в вакансии уделено языкам программирования, фреймворкам и т.п. Скипаю их ес-но. Ну и на собеседованиях уже кучу вопросов задаю по фронту работы.

samson_b ()

полезно знать один(два-три-…) язык(и) досконально

полезно зная досконально пользоваться компактным подмножеством языка - где критерием включение в сиё подмножество как 80/20 так и уменьшение числа особых случаев специализированных конструкций существующих в надкомпактном языке с целью сделать удобней особые случае которые по фактам на момент всключения сей особенности в язык являются достаточно встречаемыми в практике что-бы включить непосредственно в язык - а не обходится мобильной телегой

хорошее знание арифметики полезней программисту чем нюансы под(не пер)версии плюсов

qulinxao3 ()