02_Проблема_которую_решает_инструмент.md - YaroslavGit28/os.sys-PY GitHub Wiki

02. Проблема, которую решает инструмент

Учебный файловый менеджер на Python решает не производственную, а учебную задачу:

Показать, как с помощью os и os.system можно превратить набор системных команд в простой, переносимый и управляемый инструмент.


2.1. Формулировка проблемы

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

    • посмотреть содержимое директории;
    • переходить по папкам;
    • создавать и удалять папки;
    • иногда открывать Проводник/PowerShell из нужной точки.
  • Хочется:

    • иметь единый интерфейс («нажал 1 — получил список, нажал 3 — создал папку»);
    • абстрагироваться от различий ОС (Windows / Linux / macOS);
    • заодно потренироваться в использовании библиотеки os.

2.2. Как бы это выглядело без Python (пример)

Для Windows:

  • .bat или .ps1 с командами dir, mkdir, rmdir, explorer, start powershell и т.п.
  • Логика выбора команд через choice / if и т.д.

Для Linux/macOS:

  • отдельный .sh-скрипт с ls, mkdir, rm, xdg-open / open и т.п.

Итого — как минимум два разных набора скриптов, зависящих от ОС.


2.3. Решение на Python

С Python у нас один сценарий:

  1. Внутри Python распознаём ОС:

    import os
    import sys
    
    if os.name == "nt":
        # Windows
    elif sys.platform == "darwin":
        # macOS
    else:
        # Linux / другое
    
  2. В зависимости от ОС — выбираем нужную команду для os.system.

  3. Всё оборачиваем в интерактивное меню, которое одинаково работает на всех платформах (там, где возможно).


2.4. Диаграмма: проблема → решение

flowchart LR
    A[Пользователь\nхочет управлять файлами] --> B[Без Python:\nручные команды\nПроводник/терминал]
    B --> C[Дублирование действий\nчеловеком]
    C --> D[Ошибки, медленно,\nнет сценариев]

    A --> E[С Python + os/os.system]
    E --> F[Меню file_manager.py]
    F --> G[ОС-специфичные команды\nспрятаны внутри кода]
    G --> H[Повторяемые сценарии,\nучебная автоматизация]

2.5. Разбор кода по шагам: определение платформы

import os
import sys

if os.name == "nt":
    cmd = "explorer ."
elif sys.platform == "darwin":
    cmd = "open ."
else:
    cmd = "xdg-open ."

Пояснение построчно:

  1. import os — подключает модуль для работы с ОС и os.system.
  2. import sys — нужен для детального определения платформы (darwin).
  3. os.name == "nt" — это ветка Windows.
  4. sys.platform == "darwin" — это ветка macOS.
  5. else — Linux/Unix-подобные системы.

Зачем это нужно:

  • одна и та же задача (“открыть папку”) в разных ОС требует разных команд;
  • код остаётся единым, меняется только переменная cmd;
  • дальше можно безопасно выполнить os.system(cmd).

Типичные ошибки:

  • использовать только explorer и ломаться на Linux/macOS;
  • забыть кавычки у путей с пробелами;
  • вызывать команду, не существующую в текущей системе.