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 у нас один сценарий:
-
Внутри Python распознаём ОС:
import os import sys if os.name == "nt": # Windows elif sys.platform == "darwin": # macOS else: # Linux / другое -
В зависимости от ОС — выбираем нужную команду для
os.system. -
Всё оборачиваем в интерактивное меню, которое одинаково работает на всех платформах (там, где возможно).
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 ."
Пояснение построчно:
import os— подключает модуль для работы с ОС иos.system.import sys— нужен для детального определения платформы (darwin).os.name == "nt"— это ветка Windows.sys.platform == "darwin"— это ветка macOS.else— Linux/Unix-подобные системы.
Зачем это нужно:
- одна и та же задача (“открыть папку”) в разных ОС требует разных команд;
- код остаётся единым, меняется только переменная
cmd; - дальше можно безопасно выполнить
os.system(cmd).
Типичные ошибки:
- использовать только
explorerи ломаться на Linux/macOS; - забыть кавычки у путей с пробелами;
- вызывать команду, не существующую в текущей системе.