05_Центральные_объекты_и_архитектура.md - YaroslavGit28/os.sys-PY GitHub Wiki
05. Центральные объекты и архитектура
5.1. Главные сущности
В проекте всего один файл — file_manager.py, но внутри можно выделить несколько «ролей»:
-
CURRENT_DIR: Path:- хранит текущую рабочую директорию;
- синхронизируется с
os.getcwd()черезos.chdir()и служебные функции.
-
Функции-операции с файловой системой:
list_dir()— просмотр черезos.listdir;list_dir_scandir()— просмотр черезos.scandir;change_dir()— смена директории (os.chdir);make_dir()/make_dirs()— создание директорий (os.mkdir/os.makedirs);make_empty_file()— создание файла черезos.open/os.close;remove_item()— удаление (os.remove/os.rmdir);rename_item()/replace_item()— переименование и замена (os.rename/os.replace);show_file_info()— метаданные (os.path.*,os.stat);touch_file()— обновление времени (os.utime);check_access()— проверка прав (os.access).
-
Функции окружения и системы:
show_env_demo()—os.environ,os.getenv;show_system_info()—os.getpid,os.cpu_count,os.getlogin.
-
Функции-обёртки над
os.system:clear_screen()—cls/clear;open_explorer()—explorer/open/xdg-open;open_shell_here()—start powershell.
-
Интерфейс:
show_menu()— печать меню;main()— главный цикл (обработка выбора пользователя).
5.2. Архитектурная диаграмма
flowchart TB
subgraph UI[Пользовательский интерфейс]
MAIN[main()]
MENU[show_menu()]
end
subgraph FS[Работа с файловой системой (os / os.path)]
CURR[CURRENT_DIR]
LIST[list_dir / list_dir_scandir]
MKDIR[make_dir / make_dirs]
FILE[make_empty_file / touch_file]
RM[remove_item / rename_item / replace_item]
INFO[show_file_info / check_access]
CHDIR[change_dir()]
end
subgraph META[Окружение и система]
ENV[show_env_demo()]
SYSINFO[show_system_info()]
end
subgraph SYS[Вызовы ОС через os.system]
CLS[clear_screen()]
EXPL[open_explorer()]
SHELL[open_shell_here()]
end
MAIN --> MENU
MAIN --> LIST
MAIN --> MKDIR
MAIN --> RM
MAIN --> FILE
MAIN --> INFO
MAIN --> CHDIR
MAIN --> ENV
MAIN --> SYSINFO
MAIN --> EXPL
MAIN --> SHELL
LIST --> CURR
MKDIR --> CURR
FILE --> CURR
RM --> CURR
INFO --> CURR
CHDIR --> CURR
5.3. Примеры без os / без os.system
5.3.1. Очистка экрана
Без os.system (упрощённо):
print("\n" * 100)
С os.system (как в проекте):
import os
def clear_screen():
if os.name == "nt":
os.system("cls")
else:
os.system("clear")
5.3.2. Открытие Проводника
Без вызова ОС — нельзя универсально открыть Проводник чистым Python-кодом без обращения к внешним программам.
С os.system (как в проекте):
import os
import sys
from pathlib import Path
CURRENT_DIR = Path.cwd()
def open_explorer():
if os.name == "nt":
cmd = f'explorer "{CURRENT_DIR}"'
elif sys.platform == "darwin":
cmd = f'open "{CURRENT_DIR}"'
else:
cmd = f'xdg-open "{CURRENT_DIR}"'
os.system(cmd)
5.4. Разбор кода по шагам: синхронизация директории
CURRENT_DIR = Path(os.getcwd())
def _sync_cwd_from_os() -> None:
global CURRENT_DIR
CURRENT_DIR = Path(os.getcwd())
def _sync_os_from_current_dir() -> None:
os.chdir(CURRENT_DIR)
Что делает каждый блок:
Path(os.getcwd())— берёт текущую папку процесса и хранит её в удобном объектеPath._sync_cwd_from_os()— подтягивает состояние из ОС в переменную проекта._sync_os_from_current_dir()— наоборот, применяет состояние проекта к процессу черезos.chdir.
Зачем нужна двусторонняя синхронизация:
- чтобы не расходились
CURRENT_DIRиos.getcwd(); - чтобы
os.systemи файловые операции работали в одном ожидаемом контексте; - чтобы упрощать отладку (в шапке видно оба значения).