Модуль os в Python

Модуль os в Python и его основные функции с примерами использования

Каждый разработчик в процессе работы нередко сталкивается с необходимостью взаимодействия с операционной системой: будь то чтение или запись файлов, работа с директориями или запуск внешних процессов. Для таких задач в Python существует модуль os.

Модуль os — это встроенный модуль Python, предоставляющий средства для работы с операционной системой, включая возможность взаимодействия с файловой системой и управления процессами. Он предоставляет удобный и кроссплатформенный способ выполнения большинства необходимых операций с файлами, каталогами и процессами.

Основные функции и возможности

  1. Работа с файловой системой: Создание, удаление, переименование файлов и каталогов, чтение содержимого каталогов и многое другое.
  2. Управление процессами: Запуск новых процессов, получение идентификатора процесса, управление потоками выполнения и т. д.
  3. Взаимодействие с переменными окружения: Чтение и установка переменных окружения, что может быть полезно для настройки рабочего окружения программы.
  4. Работа с путями: Проверка существования путей, определение абсолютных и относительных путей, объединение путей и другие полезные операции.

Кроссплатформенность

Одно из главных преимуществ модуля os — кроссплатформенность. Хотя в различных операционных системах могут быть свои особенности управления файлами и процессами, модуль os пытается минимизировать эти различия и предоставить унифицированный интерфейс для работы.

Основы работы с файловой системой

Модуль os в Python предоставляет множество методов для взаимодействия с файловой системой. Независимо от того, разрабатываете ли вы инструменты для анализа данных или утилиты для автоматизации, знание этих функций окажется крайне полезным.

  • Текущий рабочий каталог

Чтобы определить текущий рабочий каталог:

import os

current_directory = os.getcwd()
print(current_directory)

Для смены текущего рабочего каталога используйте:

os.chdir('/path/to/new/directory')
  • Создание и удаление каталогов

Создание каталогов:

os.mkdir('new_directory')

Создать каталог вместе с необходимыми родительскими каталогами:

os.makedirs('parent_directory/child_directory')

Удалить один каталог (он должен быть пустым):

os.rmdir('empty_directory')

Удалить каталог и все его родительские пустые каталоги:

os.removedirs('parent_directory/child_directory')
  • Работа с файлами

Удалить файл:

os.remove('file.txt')

Переименовать файл или директорию:

os.rename('old_name.txt', 'new_name.txt')
  • Обзор содержимого директорий

Для просмотра списка файлов и директорий в каталоге используйте:

files_and_directories = os.listdir('.')
print(files_and_directories)

Для обхода всех директорий и файлов в директории:

for dirpath, dirnames, filenames in os.walk('.'):
    print(f'Found directory: {dirpath}')
    for file_name in filenames:
        print(file_name)
  • Пути

Модуль os предоставляет также подмодуль path для работы с путями.

Проверка существования:

if os.path.exists('file.txt'):
    print('File exists')

Проверка на файл/директорию:

if os.path.isfile('file.txt'):
    print('It is a file')
if os.path.isdir('directory'):
    print('It is a directory')

Получение абсолютного пути:

absolute_path = os.path.abspath('file.txt')

Работа с переменными окружения

Переменные окружения — это пары ключ-значение, которые могут использоваться для конфигурации поведения системы или приложений. В Python с помощью модуля os можно легко взаимодействовать с этими переменными.

  • Получение переменных окружения

Переменные окружения доступны в Python как словарь os.environ:

import os

# Получить значение переменной окружения PATH
path_variable = os.environ.get('PATH')
print(path_variable)
  • Установка переменных окружения

Вы можете устанавливать значения переменных окружения, но эти изменения будут видны только текущему процессу:

os.environ['MY_VARIABLE'] = 'my_value'
  • Удаление переменной окружения

Чтобы удалить переменную окружения:

del os.environ['MY_VARIABLE']

Однако стоит помнить, что удаление или изменение переменной окружения через os.environ изменяет ее только для текущего процесса. Эти изменения не будут видны другим процессам или приложениям и не сохранятся после завершения вашей программы.

  • Проверка наличия переменной окружения

Так как os.environ представляет собой словарь, вы можете использовать стандартные операции со словарями:

if 'MY_VARIABLE' in os.environ:
    print('Variable exists!')
else:
    print('Variable does not exist.')
  • Получение всех переменных окружения

Для получения списка всех переменных окружения и их значений:

for key, value in os.environ.items():
    print(f"{key} = {value}")

Управление процессами

Модуль os в Python предоставляет инструменты для управления процессами и взаимодействия с операционной системой на более низком уровне. Рассмотрим, как создавать, контролировать и управлять процессами с помощью этого модуля.

  • Создание процессов

Одна из ключевых функций модуля os — это fork(). Она позволяет создать дочерний процесс:

import os

pid = os.fork()

if pid == 0:
    # Этот блок будет выполнен в дочернем процессе
    print('Я дочерний процесс')
else:
    # Этот блок будет выполнен в родительском процессе
    print('Я родительский процесс')

Примечание: Функция fork() доступна только в UNIX-подобных системах.

  • Получение идентификатора процесса

os.getpid(): Возвращает идентификатор текущего процесса.
os.getppid(): Возвращает идентификатор родительского процесса.

print(f"Текущий процесс ID: {os.getpid()}")
print(f"Родительский процесс ID: {os.getppid()}")
  • Запуск внешних команд

Функция os.system(command) позволяет выполнить команду в субшелле:

os.system('ls -l')
  • Завершение процесса

os._exit(status): Выход из процесса с указанным статусом.

import os

pid = os.fork()
if pid == 0:
    print('Дочерний процесс завершается')
    os._exit(0)
  • Работа с дочерними процессами

os.wait(): Ожидает завершения дочернего процесса и возвращает кортеж, содержащий идентификатор завершенного дочернего процесса и статус завершения.

import os

pid = os.fork()
if pid == 0:
    print('Дочерний процесс')
else:
    child_pid, status = os.wait()
    print(f"Дочерний процесс с ID {child_pid} завершился со статусом {status}")

Заключение

Модуль os в Python — это мощный и универсальный инструмент для работы с операционной системой. Он делает процесс взаимодействия с файлами, каталогами и процессами простым и понятным, обеспечивая при этом кроссплатформенные возможности.

Содержание: