Глава 3 · Ваша первая программа на Python

PySH: Python-first оболочка

Ещё один взгляд на командную строку — что если вместо мини-языка команд использовать прямо настоящий Python?

Логотип PySH
Официальный логотип проекта PySH (pysh-shell.com) — использован для идентификации технологии, обсуждаемой в этом курсе, без заявления о партнёрстве или спонсорстве.

PySH — это реальная, установленная на этом компьютере программа, и все примеры на этой странице — настоящий, проверенный вывод именно этой установки, а не выдуманный текст.

Главная страница официального сайта pysh-shell.com
pysh-shell.com — официальный сайт проекта PySH («The Python-Native Automation Platform»). Версия на сайте (0.8.2) совпадает с версией, установленной на этом компьютере.
Только этот проект
В мире существует несколько пакетов с похожим названием «pysh». Этот раздел — именно про проект pysh-shell.com (пакет на PyPI называется pysh-shell, команда — pysh), а не про другие одноимённые инструменты.

Что такое PySH

PySH — это интерактивная командная оболочка (shell — раздел 3.3), написанная на чистом Python и позиционирующая себя как Python-first альтернатива традиционным shell вроде Bash. Официальное описание с сайта: «The Python-Native Automation Platform for Developers, System Administrators, and DevOps Engineers».

Два подхода к командной строке

ТерминалокноBash / Zshshell-язык командСкриптpipes, спецсимволы
Традиционный подход: терминал → shell-язык → shell-скрипт
pathlibисключенияloggingpytestPyPIPySH
Python-first подход PySH: обычные Python-инструменты прямо в командной строке

Традиционный shell отлично подходит для коротких интерактивных команд — но чем сложнее становится скрипт, тем сильнее чувствуется нехватка настоящего языка программирования: структурных исключений, тестов, читаемых модулей. PySH предлагает другое направление: писать автоматизацию сразу на Python, не переключаясь между двумя разными языками.

Не путайте с полной заменой Bash
PySH сам честно указывает в официальной документации: это не полная POSIX-совместимая замена /bin/sh, не клон Zsh и не гарантированно совместим с любым существующим Bash-скриптом. Это самостоятельное направление с собственным, Python-ориентированным подходом — а не притворство, что внутри спрятан настоящий Bash.

Запуск PySH — реальный вывод

На этом компьютере PySH уже установлен. Проверим это теми же командами, которыми вы проверяли бы любую другую программу:

Терминал
command -v pysh
pysh --version
Реальный вывод
/usr/bin/pysh
pysh 0.8.2

Запустим PySH и посмотрим на настоящий баннер и приглашение:

Терминал — реальная сессия PySH
🐍 PySH 0.8.2 | Python 3.13.5 | GPL-2.0-only
System: Debian GNU/Linux 13 | Kernel 6.12.101 | 11th Gen Intel Core i3-1115G4 | RAM 19 GiB
Type 'exit' or press Ctrl+D to quit.
┌─🐍 astra@soi ─ [~/Projects/Python_001] ─ git:feat/curriculum-v2-chapter-03
│  py3.13 · uv0.11.24 · ruff0.15.20 · rust1.85.0 · node26.3.1 · npm11.16.0
└─❯ 
О скриншотах на этой странице
Эта страница показывает настоящий, дословно скопированный вывод реальной установленной PySH — терминальный вывод воспроизведён как текст, а не как фотография экрана, потому что окружение, в котором собирался этот курс, технически не может делать снимки экрана графических окон. Каждая команда на этой странице была выполнена по-настоящему.

Приглашение PySH — двухстрочное и информативное: имя пользователя, хост, текущая папка, ветка git — и вторая строка с версиями инструментов проекта (Python, uv, ruff, и другие, если они найдены). Это тот же дух, что и у «продвинутых» тем оформления для Bash/Zsh, только встроенный по умолчанию.

PySH понимает обычные команды

Несмотря на Python-first философию, привычные команды тоже работают — PySH умеет запускать внешние программы, пайпы и базовые операторы, как обычный shell:

Реальная сессия
└─❯ pwd
/home/astra/Projects/Python_001
└─❯ ls scripts | head -3
build_book.py
build_chapter_01.py
build_chapter_02.py

Python прямо в командной строке

А вот это уже отличает PySH от обычного shell: команда py выполняет настоящий Python прямо на месте, в постоянном (сохраняющемся между вызовами) контексте:

Реальная сессия
└─❯ py print("hello from python")
hello from python
└─❯ py x = 10
└─❯ py print(x)
10

Переменные и импорты сохраняются между отдельными вызовами pyx из первой команды доступен во второй. Для более длинного кода есть и многострочный блок:

Реальная сессия
└─❯ py {
import os
targets = [p for p in os.environ.get("PATH", "").split(":") if p]
print(f"PATH entries: {len(targets)}")
}
PATH entries: 43

Есть и третий, более «тяжёлый» режим — полноценный вложенный Python REPL со своим >>> приглашением, который включается командой #py прямо из обычного приглашения PySH:

Реальная сессия
└─❯ #py
PySH Python Command Execution Layer | GPL-2.0-only
Python 3.13.5
Type #help for commands, Ctrl+D or #exit to return to PySH.

>>> 2 + 2
4
>>> print("Привет, PySH!")
Привет, PySH!
>>> #exit

Bash-скрипт и PySH-подход: один пример

Небольшая иллюстрация разницы в стиле — не чтобы объявить один способ «плохим», а чтобы показать, откуда берётся Python-first идея.

Задача: посчитать файлы в текущей папке
Bash
count=$(ls | wc -l)
echo "Файлов: $count"
PySH (py-блок)
py {
    import os
    count = len(os.listdir('.'))
    print(f'Файлов: {count}')
}
Что использовать сегодня: Для короткой разовой команды Bash по-прежнему быстрее набрать. Но как только автоматизация обрастает условиями, обработкой ошибок и тестами — читаемый Python начинает выигрывать. PySH даёт этот путь, не заставляя переключаться в отдельный .py-файл.

Локальная лаборатория: попробуйте PySH (необязательно)

Это — необязательное упражнение для вашего собственного компьютера. Оно не проверяется автоматически и не является обязательным условием для прохождения курса Python — PySH стоит знать, а пользоваться им дальше или нет — решать вам.

Необязательно · локально на вашем компьютере
Чек-лист: первый запуск PySH
Официальные источники
pysh-shell.com — сайт проекта; pypi.org/project/pysh-shell — страница пакета (pip install pysh-shell); полная документация — в репозитории проекта, ссылка указана на PyPI-странице.