14_Возникшие_сложности_и_ограничения.md - YaroslavGit28/os.sys-PY GitHub Wiki

14. Возникшие сложности и ограничения

Этот модуль фиксирует реальные ограничения учебного проекта и объясняет, почему они допустимы в рамках поставленной задачи.


14.1. Кроссплатформенность системных команд

Сложность:

  • команды в os.system различаются между ОС:
    • Windows: explorer, start powershell, cls;
    • macOS: open;
    • Linux: xdg-open, clear.

Следствие:

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

Почему это нормально:

  • это и есть учебная демонстрация адаптации Python-кода под ОС.

14.2. Ограничение удаления папок

Сложность:

  • os.rmdir удаляет только пустые каталоги.

Следствие:

  • пользователь не может удалить непустую директорию одним действием;
  • для “полного удаления” понадобились бы дополнительные функции/модули.

Почему это оставлено:

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

14.3. Простая валидация ввода

Сложность:

  • ввод пользователя может содержать неожиданные символы и некорректные пути.

Что сделано:

  • запрещены пустые значения;
  • ограничено использование слешей в именах там, где ожидается только имя.

Ограничение:

  • валидация намеренно простая и не покрывает все возможные случаи.

14.4. Использование глобального состояния CURRENT_DIR

Сложность:

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

Почему оставлено:

  • для маленького учебного скрипта это делает код короче и понятнее.

Если развивать проект:

  • лучше перейти к классу менеджера состояния или передаче Path явно между функциями.

14.5. Ограничения интерфейса (только CLI)

Сложность:

  • нет графического интерфейса;
  • нет “богатой” навигации и предпросмотра.

Почему приемлемо:

  • задача про os/os.system, а не про GUI;
  • консоль позволяет сосредоточиться на библиотечных вызовах.

14.6. Диаграмма рисков и ограничений

mindmap
  root((Ограничения проекта))
    Кроссплатформенность
      Разные команды OS
      Разные shell-среды
    Файловые операции
      rmdir только для пустых папок
      Права доступа
    Ввод пользователя
      Неверные имена
      Неожиданные символы
    Архитектура
      Глобальное состояние
      Один файл

14.7. Как ограничения влияют на учебную ценность

Парадоксально, но ограничения проекта делают его лучше для обучения:

  • меньше отвлекающих деталей;
  • каждый элемент напрямую демонстрирует os/os.system;
  • быстрее прослеживается причинно-следственная связь между командой и результатом.

14.8. Разбор кода по шагам: почему нужен try/except

try:
    os.rmdir(target)
    print("Папка удалена")
except OSError as e:
    print(f"Не удалось удалить: {e}")

Пояснение:

  1. os.rmdir может упасть по многим причинам (папка не пуста, нет прав, объект не папка).
  2. except OSError ловит системные ошибки файловой операции.
  3. Вместо аварийного завершения пользователь получает понятное сообщение.

Учебный вывод:

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