06_Ключевые_механизмы_работы.md - YaroslavGit28/os.sys-PY GitHub Wiki
06. Ключевые механизмы работы
6.1. Меню и цикл обработки команд
Главный цикл:
- очищает экран;
- печатает шапку и меню;
- читает выбор пользователя;
- вызывает одну из 16 учебных функций
os.*; - возвращает управление после
pause().
def main() -> None:
while True:
clear_screen()
print_header()
show_menu()
choice = input("Ваш выбор: ").strip()
if choice == "1":
list_dir() # os.listdir
pause()
elif choice == "2":
list_dir_scandir() # os.scandir
pause()
elif choice == "3":
change_dir() # os.chdir / os.getcwd
pause()
# ...
elif choice == "0":
print("Выход из программы.")
break
6.2. Управление текущей директорией
CURRENT_DIR — переменная состояния, которая:
- инициализируется как
Path(os.getcwd()); - обновляется при переходах в
change_dir(); - синхронизируется с процессом через
os.chdir.
Ключевые функции синхронизации:
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)
6.3. Основные группы вызовов os.*
Список и пути
os.listdir(CURRENT_DIR)
os.scandir(CURRENT_DIR)
os.path.join(CURRENT_DIR, name)
os.path.exists(target)
os.path.isdir(target)
Файлы и папки
os.mkdir(target)
os.makedirs(target_nested)
os.remove(file_path)
os.rmdir(dir_path)
os.rename(src, dst)
os.replace(src, dst)
Метаданные и доступ
os.stat(target)
os.utime(target, None)
os.access(target, os.R_OK)
Окружение и система
os.getenv("USERNAME")
os.environ["FILE_MANAGER_DEMO"] = "1"
os.getpid()
os.cpu_count()
Вызовы внешних программ через os.system
def clear_screen():
if os.name == "nt":
os.system("cls")
else:
os.system("clear")
def open_explorer():
os.system(cmd)
def open_shell_here():
os.system(cmd)
Это демонстрирует:
- широкий спектр API
osв одном проекте; - различие между файловыми вызовами
os.*и shell-вызовамиos.system; - кроссплатформенную ветвизацию команд.
6.4. Диаграмма «Python ↔ ОС»
sequenceDiagram
participant U as Пользователь
participant P as Python (file_manager.py)
participant OS as Операционная система
U->>P: Выбор пункта меню (например, 10)
P->>P: Формирование target через os.path.join
P->>OS: os.stat(target) / os.path.getmtime(target)
OS-->>P: Метаданные файла
P-->>U: Печать информации
6.5. Разбор кода по шагам: show_file_info()
target = os.path.join(CURRENT_DIR, name)
if not os.path.exists(target):
print("Такого файла/папки нет.")
return
print(os.path.abspath(target))
print(os.path.isfile(target), os.path.isdir(target))
print(time.ctime(os.path.getmtime(target)))
st = os.stat(target)
print(st.st_size, st.st_mode, st.st_mtime)
Пояснение:
os.path.join— собирает корректный путь из директории и имени.os.path.exists— ранняя проверка, чтобы избежать исключения вos.stat.os.path.abspath— нормализованный абсолютный путь для пользователя.os.path.isfile/isdir— тип объекта (файл или папка).os.path.getmtime+time.ctime— время последнего изменения в читаемом виде.os.stat— детальные технические метаданные.
Почему это полезно в учебном проекте:
- на одном примере видно и “простые” проверки
os.path.*, и “глубокую” статистику черезos.stat; - легко объяснить, какую функцию брать в какой ситуации.