Утилиты, встроенные в Python
Почти на всех машинах (за которые отвечаю я) установлен третий пайтон. А вместе с интерпретатором устанавливаются и модули стандартной библиотеки, некоторые из которых могут работать как самостоятельные утилиты командной строки. Я, например, давно уже пользуюсь модулем http.server для переброса файлов между машинами одной сети. Или json.tool для человеко-читаемого отображения json-данных (хотя постоянно забываю опцию --no-ensure-ascii для отображения русскоязычных строк).
Вот я и решил погрепать стандартные модули Python 3.11 на предмет встроенных полезных утилит.
Документированные модули
У меня нет желания дублировать здесь официальную документацию. Поэтому для модулей, имеющих описание режима утилиты командной строки на сайте docs.python.org, я просто оставлю ссылки:
dis - Disassembler for Python bytecode
The gzip module provides a simple command line interface to compress or decompress files.
pydoc - Documentation generator and online help system
py_compile - Compile Python source files
site - Site-specific configuration hook
The tarfile module provides a simple command-line interface to interact with tar archives
timeit — Measure execution time of small code snippets
tokenize — Tokenizer for Python source
trace - Trace or track Python statement execution
Creation of virtual environments is done by executing the command venv
webbrowser - Convenient web-browser controller
zipapp - Manage executable Python zip archives
The zipfile module provides a simple command-line interface to interact with ZIP archives
Недокументированные модули
Но существует ещё ряд встроенных в Python модулей, которые могут быть использованы в качестве утилиты командной строки, хотя это не описано в документации.
base64
Недокументированная (на текущий момент) возможность запуска модуля base64 для [рас-]кодирования данных в формате Base64. Утилита оперирует переданным в качестве аргумента файлом, но встретив значение `-` переключается на работу со стандартным потоком ввода. Пример:
encodings.rot_13
Утилита кодирования в ROT13: простой шифр для символов английского алфавита, реализуемый сдвигом ("rotate") на 13 позиций в алфавите. Символы не из английского алфавита остаются "как есть", например:
filecmp
Модуль сравнения файлов двух директорий на файловой системе.
Например создадим тестовые данные:
Результат сравнения директорий:
Указав ключ -r утилита будет сравнивать рекурсивно (все под-директории).
ftplib
Модуль реализации FTP клиента. Как можно догадаться, утилита командной строки этого модуля реализует простой FTP клиент. Например следующая команда:
- -l. выводит содержимое текущей директории
- readme.txt выводит содержимое файла readme.txt в текущей директории
- -dpub/example переходит в под-директорию pub/example
- -l. снова выводит содержимое текущей директории (pub/example)
Данные для аутентификации (в случае необходимости) берутся из файла `~/.netrc`. Утилите можно задать альтернативный файл .netrc через аргумент -r.
# UPD: 2024-11-27 Конкретный пример
Попалась в интернете ссылка:
ftp://ftp.taygeta.com/pub/Forth/Compilers/native/unix/this4th.zip
"Современные" браузеры ftp уже не открывают, требуют внешнее приложение для открытия такой ссылки. С использованием модуля ftplib этот файл может быть скачан следующей командой:
mimetypes
Модуль работы с MIME. В режиме утилиты командной строки можно как искать тип содержимого по имени файла (или его полному URL), например:
Так и наоборот: по типу содержимого искать подходящее расширение файла. Для этого нужно указывать аргумент -e, например:
platform
Модуль получения текущей платформы (операционная система и архитектура аппаратного обеспечения), на которой исполняется интерпретатор. Утилита командной строки печатает полученную платформу в стандартный поток вывода:
sysconfig
Модуль в режиме утилиты командной строки выводит общую информацию о платформе, пути и конфигурацию, с которой был собран Python (опции из Makefile и заголовочного файла pyconfig.h).
inspect
Модуль само-рефлексии python-кода. Утилита командной строки по умолчанию получает имя python-объекта в формате "module:qualname", а в стандартный поток вывода печатает исходный код реализации этого объекта. Например:
Если указать аргумент -d, то в стандартный поток вывода печатается мета-информация об объекте. Например:
pyclbr
Модуль в качестве утилиты командной строки выводит индексную информацию о python-модуле. Целевой модуль может быть задан как просто по имени, так и путём к py-файлу, например: