commit 6d94713c779dde53f7f748bd158efff28749d55c from: Aleksey Ryndin date: Tue Sep 17 16:49:02 2024 UTC Append: /python/python3.11-tools.gmi (ex. /gemlog/python3.11-tools.gmi) commit - 24197d5ddefa63ddcabd607d7b5da23a1f9e25fb commit + 6d94713c779dde53f7f748bd158efff28749d55c blob - a1fa140f6091cb3ddb3f1d51f3607d0194c2a474 (mode 644) blob + /dev/null --- capsule/gemlog/python3.11-tools.gmi +++ /dev/null @@ -1,38 +0,0 @@ -# Утилиты, встроенные в Python - -На машинах, где я работаю над чем-либо в подавляющем большинстве случаев уже установлен третий пайтон. А вместе с интерпретатором устанавливаются и модули стандартной библиотеки, некоторые из которых могут работать, как самостоятельные утилиты. Я, например, давно уже пользуюсь модулем http.server для переброса файлов между машинами одной сети или json.tool для человеко-читаемого отображения json-данных. - -Вот я и решил погрепать стандартные модули Python 3.11 на предмет встроенных полезных утилит. - -## Модуль base64 - -Недокументированная (на текущий момент) возможность запуска модуля base64 для [рас-]кодирования данных в формате Base64: -``` -$ python -m base64 -h -option -h not recognized -usage: /usr/lib/python2.7/base64.py [-d|-e|-u|-t] [file|-] - -d, -u: decode - -e: encode (default) - -t: encode and decode string 'Aladdin:open sesame' -``` - -Утилита оперирует переданным файлом, значение - переключает на работу со стандартным потоком ввода. Пример: - -``` -$ echo "Aladdin:open sesame" | python -m base64 - -QWxhZGRpbjpvcGVuIHNlc2FtZQo= -$ echo QWxhZGRpbjpvcGVuIHNlc2FtZQo= | python -m base64 -d - -Aladdin:open sesame -``` - -## Модуль calendar - -Работа модуля calendar в режиме утилиты хорошо документирована: -=> https://docs.python.org/3/library/calendar.html - -Утилита выводит календарь в формате простого текста или HTML. - -## Модуль cProfile - -Модуль поддержки профилирования исполнения Python-кода. Работа модуля хорошо документирована: -=> https://docs.python.org/3/library/profile.html blob - fae562eda97c46b0e67d66432bd25bfb1ccb6e94 blob + 3fa777e99e5564188eed822a3b2d2ff69f87bce8 --- capsule/index.gmi +++ capsule/index.gmi @@ -6,6 +6,7 @@ => atom.xml Лента публикаций + ## Программирование В этом разделе собраны материалы по проектам, где я участвую в разработке. @@ -34,29 +35,38 @@ => forth/ Форт и сопутствующие проекты +### Летающий цирк (Python) + +=> python/ Язык программирования Python + ### "Ненормальное" программирование Да, практически все мои проекты можно (как минимум) отнести к категории "непрактичный". Но я решил сделать отдельный раздел своей капсулы для особо ярких представителей: => esoteric/ Эзотерическое "программирование" + ## Тривиальные Технологии => tt/ Экземпляр перевода Тривиальных Технологий для Gemini капсулы + ## Прочитано ✅ => readed/ Мой читательский дневник + ## Архив аудио лекции В своей капсуле я храню архив интересных (по моему мнению) аудиолекции. => not_my_voice/ Аудио лекции + ## Фото-ловушка 🪤 => trap/ Эксперименты с фото-ловушкой + ## Связаться со мной При желании со мной можно связаться следующими способами: @@ -67,6 +77,7 @@ => pgp_public_key.gmi публичный PGP-ключ для связи со мной (в случае необходимости) + ## Покидая капсулу => warp/ Ссылки на другие Gemini капсулы blob - /dev/null blob + 0f0a9593b0f9786c0292ae3d59373f6eb557c5fc (mode 644) --- /dev/null +++ capsule/python/index.gmi @@ -0,0 +1,5 @@ +# Летающий цирк (Python) + +Язык программирования Python + +=> python3.11-tools.gmi Утилиты, встроенные в Python blob - /dev/null blob + 7877d33b9961996000e9126034cffd68a0d40b8f (mode 644) --- /dev/null +++ capsule/python/python3.11-tools.gmi @@ -0,0 +1,133 @@ +# Утилиты, встроенные в Python + +На машинах, где я работаю над чем-либо в подавляющем большинстве случаев уже установлен третий пайтон. А вместе с интерпретатором устанавливаются и модули стандартной библиотеки, некоторые из которых могут работать, как самостоятельные утилиты. Я, например, давно уже пользуюсь модулем http.server для переброса файлов между машинами одной сети или json.tool для человеко-читаемого отображения json-данных. + +Вот я и решил погрепать стандартные модули Python 3.11 на предмет встроенных полезных утилит. + +## Модуль base64 + +Недокументированная (на текущий момент) возможность запуска модуля base64 для [рас-]кодирования данных в формате Base64: +``` +$ python -m base64 -h +option -h not recognized +usage: /usr/lib/python2.7/base64.py [-d|-e|-u|-t] [file|-] + -d, -u: decode + -e: encode (default) + -t: encode and decode string 'Aladdin:open sesame' +``` + +Утилита оперирует переданным файлом, значение - переключает на работу со стандартным потоком ввода. Пример: + +``` +$ echo "Aladdin:open sesame" | python -m base64 - +QWxhZGRpbjpvcGVuIHNlc2FtZQo= +$ echo QWxhZGRpbjpvcGVuIHNlc2FtZQo= | python -m base64 -d - +Aladdin:open sesame +``` + +## Модуль calendar + +Работа модуля calendar в режиме утилиты хорошо документирована: +=> https://docs.python.org/3/library/calendar.html + +Утилита выводит календарь в формате простого текста или HTML. + +## Модуль cProfile + +Модуль поддержки профилирования исполнения Python-кода. Работа модуля хорошо документирована: +=> https://docs.python.org/3/library/profile.html + +## Модуль dis + +Модуль дизассемблирования python-кода. Имеет короткую справку (документацией это назвать сложно): +=> https://docs.python.org/3/library/dis.html + +На вход (или в стандартный поток ввода) ожидает содержимое текстового python-скрипта (не работает со скомпилированными *.pyc файлами). Например: +``` +$ echo "import os" | python3 -m dis - + 1 0 LOAD_CONST 0 (0) + 2 LOAD_CONST 1 (None) + 4 IMPORT_NAME 0 (os) + 6 STORE_NAME 0 (os) + 8 LOAD_CONST 1 (None) + 10 RETURN_VALUE +``` + +## Модуль encodings.rot_13 + +Утилита кодирования в ROT13: простой шифр для символов английского алфавита, реализуемый сдвигом ("rotate") на 13 позиций в алфавите. Символы не из английского алфавита остаются "как есть", например: +``` +$ echo test-тест | python3 -m encodings.rot_13 +grfg-тест +$ echo grfg-тест | python3 -m encodings.rot_13 +test-тест +``` + +## Модуль filecmp + +Модуль сравнения файлов двух директорий на файловой системе. + +Например создадим тестовые данные: +``` +$ mkdir sub1 +$ echo "" > sub1/file +$ echo "sub1-file1" > sub1/file1 +$ echo "sub1-file2" > sub1/file2 +$ mkdir sub2 +$ echo "" > sub2/file +$ echo "sub2-file1" > sub2/file1 +$ echo "sub2-file3" > sub2/file3 +``` + +Результат сравнения директорий можно получить в краткой форме: +``` +$ python3 -m filecmp sub1 sub2 +diff sub1 sub2 +Only in sub1 : ['file2'] +Only in sub2 : ['file3'] +Identical files : ['file'] +Differing files : ['file1'] +``` +Указав ключ -r утилита будет сравнивать рекурсивно (все под-директории). + +## Модуль ftplib + +Модуль реализации FTP клиента. Как можно догадаться, утилита командной строки этого модуля реализует простой FTP клиент. Например следующая команда: +``` +$ python3.11 -m ftplib test.rebex.net -l. readme.txt -dpub/example -l. +drwx------ 2 anonymous users 0 Mar 31 2023 pub +-rw------- 1 anonymous users 379 Sep 19 2023 readme.txt +Welcome to test.rebex.net! + +You are connected to an FTP or SFTP server used for testing purposes +by Rebex FTP/SSL or Rebex SFTP sample code. Only read access is allowed. + +For information about Rebex FTP/SSL, Rebex SFTP and other Rebex libraries +for .NET, please visit our website at https://www.rebex.net/ + +For feedback and support, contact support@rebex.net + +Thanks! +-r-------- 1 anonymous users 19156 Feb 16 2007 imap-console-client.png +-rw------- 1 anonymous users 36672 Mar 19 2007 KeyGenerator.png +-rw------- 1 anonymous users 24029 Mar 19 2007 KeyGeneratorSmall.png +-r-------- 1 anonymous users 16471 Feb 16 2007 mail-editor.png +-r-------- 1 anonymous users 35414 Feb 16 2007 mail-send-winforms.png +-r-------- 1 anonymous users 49011 Feb 16 2007 mime-explorer.png +-rw------- 1 anonymous users 58024 Mar 19 2007 pocketftp.png +-rw------- 1 anonymous users 20197 Mar 19 2007 pocketftpSmall.png +-r-------- 1 anonymous users 20472 Feb 16 2007 pop3-browser.png +-r-------- 1 anonymous users 11205 Feb 16 2007 pop3-console-client.png +-rw------- 1 anonymous users 379 Sep 19 2023 readme.txt +-rw------- 1 anonymous users 11546 Mar 19 2007 ResumableTransfer.png +-rw------- 1 anonymous users 2635 Mar 19 2007 winceclient.png +-rw------- 1 anonymous users 6146 Mar 19 2007 winceclientSmall.png +-rw------- 1 anonymous users 80000 Mar 19 2007 WinFormClient.png +-rw------- 1 anonymous users 17911 Mar 19 2007 WinFormClientSmall.png +``` +* -l. выводит содержимое текущей директории +* readme.txt выводит содержимое файла readme.txt в текущей директории +* -dpub/example переходит в под-директорию pub/example +* -l. снова выводит содержимое текущей директории (pub/example) + +Данные для аутентификации (в случае необходимости) берутся из `~/.netrc`. Утилите можно задать альтернативный файл .netrc через аргумент -r.