Реализован минимальный эмулятор командной оболочки (CLI) для варианта №9. Эмулятор выполняет команды, работает с VFS, загружаемым из ZIP-архива, поддерживает выполнение стартовых скриптов и логирует ошибки в консоли.
Реализованные этапы (требования варианта №9):
- Этап 1 (REPL): консольный интерфейс, приглашение содержит имя VFS, парсер с обработкой аргументов в кавычках, заглушки ls/cd, команда exit.
- Этап 2 (Конфигурация): параметры командной строки
--vfs
и--script
. Стартовый скрипт поддерживает комментарии (# ...
) и при исполнении показывает ввод и вывод, ошибки сообщаются. - Этап 3 (VFS): источник — ZIP-архив; все операции в памяти; ошибки загрузки сообщаются.
- Этап 4 (Основные команды): реализованы
ls
,cd
,tail
,date
. - Этап 5 (Доп. команды): реализована
mkdir
(вносит изменения только в памяти).
emulator_variant9/
├─ README.md
├─ emulator.py # основной исполняемый файл
├─ sample_vfs.zip # пример VFS (ZIP). создаётся вручную или с помощью helper
├─ scripts/
│ ├─ start.script # пример стартового скрипта
│ └─ test_vfs.script # дополнительные тесты
└─ LICENSE
- Требования: Python 3.8+ (стандартные библиотеки: zipfile, argparse, shlex).
- Скопируйте
emulator.py
в рабочую папку и подготовьте ZIP-VFS (см. ниже). - Запуск в интерактивном режиме (без стартового скрипта):
python emulator.py --vfs sample_vfs.zip
- Запуск со стартовым скриптом:
python emulator.py --vfs sample_vfs.zip --script scripts/start.script
- Каждая строка — команда эммулятора.
- Комментарии начинаются с
#
и игнорируются. - При исполнении каждая строка выводится как ввод и затем выводится результат или сообщение об ошибке.
Пример (scripts/start.script
):
# Пример запуска
ls
cd "dir with spaces"
ls
cat file.txt
mkdir newdir
ls
ls [path]
— перечислить содержимое (если путь пропущен — текущая директория).cd <path>
— сменить текущую директорию (поддерживает..
).exit
— выход из эмулятора.tail [-n NUM] <file>
— показать последние NUM строк (по умолчанию 10).date
— вывести текущую дату и время ОС.mkdir <dir>
— создать директорию в VFS (только в памяти).