11_Формулировка_прикладной_задачи.md - YaroslavGit28/os.sys-PY GitHub Wiki

11. Формулировка прикладной задачи


11.1. Базовая учебная задача

Нужно написать учебный консольный файловый менеджер:

  • с минимальной бизнес-логикой;
  • с акцентом на библиотеку os и os.system;
  • с простым, понятным интерфейсом для демонстрации функций стандартной библиотеки.

11.2. Конкретные требования к проекту

  1. Без сложной логики:

    • никаких рекурсивных обходов дерева;
    • никаких сложных фильтров, шаблонов, регулярных выражений;
    • никаких БД, API, GUI.
  2. Сфокусироваться на функциях библиотеки:

    • os.system для вызова внешних системных команд;
    • os.mkdir, os.makedirs, os.remove, os.rmdir для ФС;
    • os.rename, os.replace для управления именами;
    • os.listdir, os.scandir для обзора директории;
    • os.path.* и os.stat для метаданных;
    • os.utime, os.access, os.environ, os.getenv;
    • os.getpid, os.cpu_count, os.getlogin.
  3. Интерактивный интерфейс в виде меню:

    • пользователь выбирает пункт цифрой;
    • каждое действие должно быть наглядным и повторяемым.
  4. Учебная переносимость:

    • Windows — полный набор функций;
    • Linux/macOS — корректная деградация там, где поведение отличается.

11.3. Ограничения (чтобы не усложнять)

Чтобы проект оставался учебным:

  • удаляем только пустые папки (os.rmdir);
  • не поддерживаем рекурсивное удаление каталогов;
  • не делаем многопоточность;
  • не добавляем сложные конфиги и внешние зависимости.

11.4. Ожидаемый результат

После выполнения задачи студент получает:

  • рабочий скрипт file_manager.py;
  • понимание связки:
    • “ввод пользователя → Python-функция → системный вызов или файловая операция”;
  • практический опыт:
    • безопасного ввода;
    • обработки базовых ошибок;
    • кроссплатформенной развилки по ОС.

11.5. Диаграмма: требование → реализация

flowchart TD
    A[Требование:\nучебный проект] --> B[Показать работу os/os.system]
    B --> C[Сделать простой\nконсольный интерфейс]
    C --> D[file_manager.py\nодин файл]
    D --> E[Функции:\nlistdir/scandir/chdir,\nmkdir/makedirs/remove/rmdir,\nrename/replace/stat/access,\nenv/system/os.system]
    E --> F[Пользователь видит\nпрямую связь кода и результата]

11.6. Пример без os и с os для одной задачи

Задача: создать папку и показать содержимое

Без Python (ручной PowerShell):

mkdir lesson_folder
dir

С Python (os):

import os
from pathlib import Path

current = Path.cwd()
os.mkdir(current / "lesson_folder")
for item in current.iterdir():
    print(item.name)

Вывод: Python-скрипт даёт переиспользуемую логику, а не одноразовые ручные команды.


11.7. Разбор кода по шагам: создание файла через os.open

target = os.path.join(CURRENT_DIR, name)
fd = os.open(target, os.O_CREAT | os.O_EXCL | os.O_WRONLY)
os.close(fd)

Пояснение:

  1. os.path.join формирует путь к новому файлу.
  2. os.O_CREAT — создать файл, если его нет.
  3. os.O_EXCL — не перезаписывать существующий (иначе исключение).
  4. os.O_WRONLY — открыть только на запись.
  5. os.close(fd) — обязательно закрыть дескриптор.

Образовательная ценность:

  • показывает “низкоуровневую” работу с файлами через os, а не только open(...);
  • хорошо демонстрирует различие флагов открытия.