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

Проблемы со сценариями

Независимо от нашей роли в разработке программного обеспечения, мы часто работаем с Linux/Unix(*nix). При работе с командной строкой (CLI) на *nix нам нужно писать сценарии оболочки. Мы что-то автоматизируем с помощью скриптов или обрабатываем некоторые данные с помощью команд оболочки. Большую часть времени мы уже знаем часто используемые команды, иначе гуглим. Но это становится утомительным, если задача длинная или сложная, и становится сложнее найти подходящую команду или объединить более двух команд.

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

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

Итак, давайте посмотрим, как использование Python помогает преодолеть некоторые из этих проблем.

Почему Python — хороший выбор для написания сценариев?

  • Python, будучи языком очень высокого уровня, имеет функции, аналогичные всем другим типичным языкам программирования высокого уровня.

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

  • Python также предоставляет хороший REPL (интерпретатор), который становится удобным для стратегии проб и ошибок.
  • Богатый набор поддержки библиотек и огромное сообщество разработчиков для вопросов и ответов в IRC, списке рассылки и переполнении стека.
  • Библиотеки, написанные на python для взаимодействия с ОС, являются оболочками для конкретной библиотеки ОС. Таким образом, эти библиотеки являются общими.

Таким образом, вы можете легко написать скрипт Python в одной конкретной ОС и использовать его в другой ОС без каких-либо изменений.

  • Чтобы написать скрипт на python, вам не обязательно иметь полноценную IDE, вам просто нужен редактор (vim или любой другой) и бинарный файл python.

Так что я могу сказать, что в этом смысле он очень легкий.

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

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

Позвольте мне показать вам короткий пример.

Предположим, у нас есть один файл, в котором есть текст, содержащий IP-адрес (аналогично выводу команды «ip addr»). Теперь задача состоит в том, чтобы сначала извлечь все IP-адреса из файла, а затем проверить один за другим, является ли IP-адрес активным или нет. Задача может показаться простой, но я призываю вас сделать здесь паузу и попытаться написать сценарий для нее с помощью команд оболочки или, по крайней мере, просто подумать, как это можно сделать.

файл: sample_text_file.txt

~]# ip address add 192.1.2.223/24 dev eth1
~]# ip address add 192.165.4.223/24 dev eth0
~]# ip addr
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:fb:77:9e brd ff:ff:ff:ff:ff:ff
    inet 192.168.8.1/24 scope global eth1
    inet 192.168.4.23/24 scope global eth1

Сделанный?

Теперь давайте сделаем это с помощью скрипта Python.

import sys
import os
import re

# function to extract all ip address from a file.
def get_all_ip_from_file(file_path):

    file_data = open(file_path, "r").readlines()
    ip_address_list = [] # List to store ip address
    for line in data:
        ips_on_line = re.findall( r'[0-9]+(?:\.[0-9]+){3}', line ) 
        ip_address_list = ip_adress_list + ips_on_line
    return ip_address_list

# function to check if the ip is Up or Down
def check_if_ip_up_or_down(ip):

    response = os.system("ping -c 1 " + ip) 
    if response == 0:
        print ip, 'is up!'
        return True
    else:
        print ip, 'is down!'
        return False


def main():
    ip_list = get_all_ip_from_file('sample_text_file.txt')
    for ip in ip_list:
        status = check_if_ip_up_or_down(ip)
        print ip + " --> "+ str(status)

main()

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

Первоначально опубликовано на saurabhkukade.github.io.