Ни для кого не секрет, что с точки зрения автоматизации любых простых действий обе версии скриптов являются мощными инструментами.
Я читаю Эта статья , и подумал - чем мы хуже? Я возьму и опишу, как автоматизировать простые консольные действия с помощью 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():
  hst=re_dns.search(line)
  if (hst != None):
    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):
  break
Проверяю тот самый Никто .
Еще раз обратите внимание на отступ перед перерыв .
Как вы, вероятно, знаете из других языков, это перерыв является оператором прерывания цикла.
Таким образом, как только час становится неравным Никто - цикл прерывается.
host=hst.group(0)
Как я уже сказал, в переменную час возвращает список строк, соответствующих регулярному выражению.
На самом деле, точнее, возвращается не список, а кортеж элементов.
А поскольку мы прервали цикл, как только нашли первую подходящую строку, она будет записана в первый (он же нулевой) элемент кортежа, который мы благополучно извлекаем и записываем в него.
хозяин .
print "Corbina host adress is "+host
А потом выводим этот IP-адрес в консоль.
Оператор Распечатать выводит переданную ему строку на консоль и даже позволяет конкатенацию строк с помощью простого сложения.
Ну, собственно, это все для начала.
Прошу особо не ругать и не пинать за рваность повествования; если будут претензии, с радостью выслушаю и постараюсь исправить.
Теги: #скрипты #python #автоматизация #консоль #python
-
Резкое Падение Стоимости Hd-Телевизоров
19 Oct, 24 -
Об Интервью
19 Oct, 24