В этом параграфе мы сначала поговорим о командной строке — очень простом, но очень мощном инструменте, которым пользуются и аналитики данных, и программисты, и многие другие ИТ-специалисты.
А далее научим вас делать с его помощью разные хитрости: скачивать файлы, конвертировать их в другие форматы и многое другое. Это первый, но уверенный шаг в борьбе с рутиной и скучными жизненными задачами.
Интерфейс командной строки
Вряд ли вы часто им пользуетесь — современные операционные системы (Windows, MacOS) взаимодействуют с пользователем с помощью графического интерфейса: окон, папок и файлов. Нужно запустить программу — кликаем два раза по ярлыку. Хотим посмотреть, что там в «Загрузках», — открываем соответствующее окно.
Всё это можно сделать и через командную строку. И даже больше: вспомните один из штампов Голливуда — когда герой с помощью интерфейса командной строки делает невероятные вещи: взламывает банк, или проникает в систему безопасности преступного синдиката, или подключается к камерам наблюдения. Обычно это выглядит как-то так:
Во всех популярных операционных системах (macOS, Linux, Windows) есть одна или даже несколько программ для работы с командной строкой. Вот они:
Программа cmd в Windows:
Программа PowerShell в Windows:
Программа «Терминал», MacOS:
Программа Bash, Ubuntu 22.04:
Все они называются командными интерпретаторами. Они выполняют (интерпретируют) ваши команды.
С ними можно делать всё то же самое, что вы делаете с помощью графического интерфейса (его ещё называют GUI), — только гораздо быстрее. Вы убедитесь в этом ближе к концу параграфа, пока просто поверьте нам на слово.
Последнее, что важно тут сказать, — командная строка работает в цикле REPL (от англ. read-eval-print loop — «цикл „чтение — вычисление — вывод“»):
- программа демонстрирует приглашение к вводу (например,
C:\Users\bibilov>
), показывая, что готова выполнить команду; - команда вместе с параметрами вводится с клавиатуры, в конце нажимается клавиша
Enter
; - на экране показывается результат работы программы и новое приглашение к вводу.
Несколько примеров для разогрева
Здесь и далее мы будем работать в Powershell, так как, по статистике, большая часть пользователей применяет Windows. Для счастливых обладателей MacOS или Linux/Ubuntu в конце главы мы поместили таблицу соответствия использованных команд. Итак, поехали!
Чтобы открыть Powershell, введите это название в окошко поисковой строки справа от кнопки «Пуск». Можно воспользоваться более хардкорным вариантом: нажать клавиши Win + R, ввести в открывшемся окне (оно называется «Выполнить») команду powershell и нажать Enter. Теперь мы можем поработать с командной строкой.
Допустим, нам нужно узнать время. Введём команду date
, которая выведет текущую дату в нулевом часовом поясе (UTC+0):
C:\Users\bibilov> date
Sat Sep 24 05:46:47 PM UTC 2022
При вводе команды также можно передавать параметры
— это опции, которые позволяют уточнять, какой результат мы хотим получить. Например, с параметром формата %d
, команда выводит только текущий день месяца:
C:\Users\bibilov> date -Format "dd"
24
Почему командный интерпретатор не вымер
Потому что с его помощью удобно автоматизировать задачи. Если нам надо сделать что-то один раз, конечно, привычней это сделать с помощью графического интерфейса.
Но если нужно повторить что-то несколько сотен раз, выполнить на нескольких компьютерах одни и те же действия, повторять одинаковые действия каждые 5 минут — тратить бесценные часы живого человека нежелательно.
Можно записать подряд несколько текстовых команд в один файл — сценарий и заставить компьютер повторять его. А записывать текстом понятней и удобней всего.
В своих сценариях вы можете оперировать объектами, командами и программами, которые установлены в вашей системе, файлами и папками, настройками, браузером, текстовым и табличным процессором, базой данных и т. д.
Например, мы можем собрать несколько команд по созданию Word-документа (если он у вас установлен):
C:\Users\bibilov>
$w = New-Object -ComObject Word.Application # Получили доступ к установленному Word.
$doc = $w.Documents.Add() # Создаем новый документ.
$selection = $w.Selection # Объект, где находится курсор в данный момент.
$selection.TypeText("Part I") # Напечатаем текст.
$w.Visible = $True # Сделаем Word видимым, все манипуляции до этого велись в памяти, без запуска GUI.
Давайте напишем свой первый сценарий автоматизации.
Цепочки преобразований данных
У нас есть огромное количество «строительных блоков» — готовых компонентов, программ, команд, на основе которых можно писать сценарии. Мы можем настроить их совместную работу таким образом, чтобы выстраивался конвейер (цепочка, pipeline) — совсем как на заводе Ford, где каждую операцию производит узкий специалист, а результат работы передается следующему.
Представим такую задачу: нам нужно распознать тексты, которые написаны на мемах в интернете, чтобы посчитать среднее число слов в них. Конечно, можно посчитать их вручную — но это нереально, тут так и просится автоматизация.
Для этого нам нужно:
- создать папку для работы;
- скачать мемы, которые мы хотим распознать (поскольку задача учебная, ограничимся только одним);
- конвертировать изображение в подходящий для распознавания формат;
- извлечь текст со страницы;
- посчитать количество слов.
Для каждого из этих пунктов есть готовая программа с интерфейсом командной строки.
1. Создать папку для работы
Создадим папку, чтобы потом быстро удалить результаты наших опытов. Сделать это очень просто:
C:\Users\bibilov> mkdir Data
Каталог: C:\Users\bibilov\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 09.02.2023 10:20 Data
И сразу перейдем в неё:
C:\Users\bibilov> cd Data
2. Скачать мемы, которые мы хотим распознать (поскольку задача учебная, ограничимся только одним)
Нам потребуется программа wget
, которая в самом простом случае принимает 1 параметр — ссылку на файл. Она уже установлена.
C:\Users\bibilov\Data> wget -O 01.webp https://img-9gag-fun.9cache.com/photo/aVbxpod_460swp.webp
После чего в папке будет сохранен 1 файл: 01.webp
. Выглядит он так:
3. Извлечь изображение со страницы
Преобразуем картинку в более привычный нам формат. Программа называется Image Magick
. Скачать её можно тут. Вам нужна версия, которая называется ImageMagick-7.1.1-24-Q16-HDRI-x64-dll.exe
. Установите её со стандартными настройками установки, дополнительно ничего изменять не нужно.
Указываем два параметра: имя исходного файла и имя нового файла, куда сохранять изображения:
C:\Users\bibilov\Data> magick 01.webp 01.png
3. Распознать текст на картинке
Здесь нам поможет система распознавания текстов Tesseract. Установить её можно отсюда. Вам нужна версия tesseract-ocr-setup-3.02.02.exe
. Установите её со стандартными настройками установки, дополнительно ничего изменять не нужно.
C:\Users\bibilov\Data> tesseract 01.png 01
Указываем исходный файл и текстовый файл, куда сохраним всё содержимое. В данном случае — 01.txt
. Расширение txt
не пишется в параметре команды.
Откроем этот файл в блокноте.
C:\Users\bibilov\Data> notepad.exe 01.txt
Примерное содержимое файла:
Harry didn’t cast a
single spell with
his wand in the 1st movie
Забавно. Никогда не задумывался об этом раньше.
4. Посчитать слова
Это тоже очень просто. Тут мы сначала открываем файл, а потом считаем слова в нём:
C:\Users\bibilov\Data> Get-Content 01.txt | Measure-Object -Word
Lines Words Characters Property
----- ----- ---------- --------
13
5. Удаление папки
Вернёмся в исходную папку и удалим папку с результатами нашего эксперимента:
C:\Users\bibilov\Data> cd C:\Users\bibilov\
C:\Users\bibilov> Remove-Item –path Data –recurse
Итоговый сценарий для одного изображения
wget -O 01.webp https://img-9gag-fun.9cache.com/photo/aVbxpod_460swp.webp
magick 01.webp 01.png
tesseract 01.png 01
Get-Content 01.txt | Measure-Object -Word
Мы практически один в один воплотили изначальную идею:
1. скачать картинку;
2. распознать текст на картинке;
3. посчитать число слов.
Вот таблица соответствий, чтобы реализовать сценарий, если вы используете Linux или macOS.
Windows (powershell) |
Linux (bash) или macOS (zsh) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Давайте чуть остановимся и сформулируем, что мы узнали:
- сценарии автоматизации не сильно больше объяснения на русском языке;
- мы оперируем высокоуровневыми программами, например
Tesseract
; - результаты действия одной программы передаются следующей — так и получается цепочка преобразований.
- все приведённые программы бесплатны и свободны, что дополнительно приятно.
Конечно, это только первый шаг — чтобы выполнить первоначальную задачу, нам потребовалось бы повторить эти действия для всех мемов, которые мы можем найти в интернете.
А пока переходите к следующему параграфу главы. В нём вы узнаете, как видит и хранит данные компьютер и почему это так похоже на Кощея и его иглу.