Скрипты Python Против Bash

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

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



Идти!

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

#!/usr/bin/python

Где /usr/bin/питон — адрес интерпретатора Python, установленного в вашей системе.

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

Обычно это работает только в системах NIX. В Windows сценарии автоматически становятся исполняемыми, когда устанавливается соответствие между программой-интерпретатором и типом файла.

.

py .

В целом скрипты Python во многом похожи на скрипты Bash, но, на мой взгляд, они гораздо элегантнее.

Давайте рассмотрим основные функции, которые могут нам понадобиться:

listdir(path)

Возвращает список имен файлов и папок в папке с именем path.

mkdir(path)

Создает папку с именем path.

makedirs(path)

Работает аналогично функции mkdir(), но автоматически создает все необходимые промежуточные папки.



remove(path)

Удаляет файл с именем path.

rmdir(path)

Удаляет каталог с именем path.

removedirs(path)

Работает аналогично функции rmdir(), но автоматически удаляет все родительские пустые папки.



rename(src, dst)

Переименовывает файл или папку с именем src в dst.

open(filename, flag)

Открывает файл с именем filename. Флаг нужен для определения режима доступа: «r» — чтение, «w» — запись, «a» — добавление.



read(size)

Считывает данные размера size из файла и возвращает их в виде строки.

Если аргумент опущен, считывается все содержимое файла.



readline()

Считывает одну строку из файла, включая символ новой строки («\n»).



readlines()

Считывает все строки из файла и возвращает их в виде списка.



write(string)

Записывает строку в файл.



writelines(lines)

Записывает строки из списка строк в файл.

Между ними не добавляется символ новой строки.



tell()

Возвращает текущую позицию в файле в байтах от начала файла.



seek(offset, whence)

Изменяет положение на смещение.

Характер определения позиции зависит от аргумента откуда (по умолчанию 0): 1) 0 – новая позиция отсчитывается с начала файла; 2) 1 – с конца файла; 3) 2 – с текущей позиции в файле;

truncate(size)

Усекает файл до нужного размера.



close()

Закрытие файла.

Помнить! Любое открытие файла должно сопровождаться последующим закрытием с использованием этого метода.



А теперь – к более частным случаям.

Бардак в голове? Ничего страшного, сейчас разберемся во всем подробнее.

Прежде всего, давайте добавим немного интерактивности.

Иначе какой смысл в нашем скрипте, если он ничего не спрашивает у пользователя? :) Для ввода с клавиатуры используйте метод сырой ввод() .

Почему бы просто не вход() ? Потому что при чтении строки через вход() он передается через интерпретатор, который преобразует введенную строку в команду.

У меня руки чешутся войти РМ -РФ .

Ладно, идем дальше! Синтаксис функции следующий:

login = raw_input("Enter your name: ")

Здесь авторизоваться — переменная, в которую считывается после нажатия Входить введенная пользователем строка.

Теперь давайте откроем файл и запишем в него некоторую информацию.



gogo = open ("/home/username/helloworld","w") gogo.write("Hello, world!") gogo.close()

Кстати, рекомендую, прежде чем делать вышеописанное, проверить, не завалялся ли у вас какой-нибудь нужный файл по адресу /home/имя пользователя/helloworld ? В противном случае все в нем сотрется и на месте преступления не останется ничего, кроме «Привет, мир!» Ну а теперь давайте поработаем непосредственно с консолью.

Лично я в одном куске кода получил команду с вывода хостдомен.

com адрес хоста вашего интернет-провайдера.

Сказано - сделано.



import os import re vid = os.popen("host l2tp.corbina.ru") re_dns = re.compile(r"([\d]+)\.

([\d]+)\.

([\d]+)\.

([\d]+)") for line in vid.readlines(): &nbsp hst=re_dns.search(line) &nbsp if (hst != None): &nbsp &nbsp break host=hst.group(0) print "Corbina host adress is "+host

Ух, столько всего.

Что ж, давайте разбираться.

Построчно.



import os import re

Мы включаем стандартные библиотеки Python, чтобы все работало.

Операционные системы — библиотека для работы с системными вызовами и консолью.

ре — для работы с регулярными выражениями.



vid = os.popen ("host l2tp.corbina.ru")

Здесь мы как бы «вводим» команду в консоль хост l2tp.corbina.ru и то, что происходит, помещается в переменную в виде списка видео .



re_dns=re.compile(r"([\d]+)\.

([\d]+)\.

([\d]+)\.

([\d]+)")

Друзья мои, это преобразование регулярного выражения.

re_dns — переменная, в которую записывается специальный объект, полученный с помощью метода повторно.

компилировать() .

Сам синтаксис регулярного выражения объяснять не буду, тем более, что он самый простой, скажу лишь, что это самый простой вариант фильтра по IP-адресам.



for line in vid.readlines():

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

Здесь берется переменная линия , в который поочередно записываются строки из списка вид.readlines() .

Если строки в списке закончатся, цикл также завершится.

Двоеточие в конце отмечает начало раздела операторов, встречающихся в цикле.

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

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

Кстати, это относится и к условному оператору если , как показано ниже.



hst=re_dns.search(line)

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



if (hst != None): &nbsp break

Проверяю тот самый Никто .

Еще раз обратите внимание на отступ перед перерыв .

Как вы, вероятно, знаете из других языков, это перерыв является оператором прерывания цикла.

Таким образом, как только час становится неравным Никто - цикл прерывается.



host=hst.group(0)

Как я уже сказал, в переменную час возвращает список строк, соответствующих регулярному выражению.

На самом деле, точнее, возвращается не список, а кортеж элементов.

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

хозяин .



print "Corbina host adress is "+host

А потом выводим этот IP-адрес в консоль.

Оператор Распечатать выводит переданную ему строку на консоль и даже позволяет конкатенацию строк с помощью простого сложения.

Ну, собственно, это все для начала.

Прошу особо не ругать и не пинать за рваность повествования; если будут претензии, с радостью выслушаю и постараюсь исправить.

Теги: #скрипты #python #автоматизация #консоль #python

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.