os — Разные интерфейсы операционной системы
Этот модуль предоставляет переносимый способ использования функциональности, зависящей от операционной системы. Если вам нужно просто прочитать или записать файл, см. open(), если вы хотите манипулировать путями, см. модуль os.path, а если вы хотите прочитать все строки во всех файлах в командной строке, см. модуль fileinput. Для создания временных файлов и каталогов см. модуль tempfile, а для работы с файлами и каталогами высокого уровня см. модуль shutil.
Примечания по доступности этих функций:
- Дизайн всех встроенных модулей операционной системы Python таков, что, пока доступна та же функциональность, используется тот же интерфейс; например, функция
os.stat(path)возвращает информацию о статусе path в том же формате (который происходит от интерфейса POSIX). - Расширения, характерные для конкретной операционной системы, также доступны через модуль
os, но их использование, конечно, представляет угрозу для переносимости. - Примечание «Доступность: Unix» означает, что эта функция обычно встречается в системах Unix. Она не дает никаких заявлений о ее существовании в конкретной операционной системе.
- Если не указано особо, все функции, которые заявляют о «Доступности: Unix», поддерживаются в Mac OS X, которая построена на ядре Unix.
Примечание
Все функции в этом модуле поднимают OSError в случае недопустимых или недоступных имен файлов и путей, или других аргументов, имеющих правильный тип, но не принимаемых операционной системой.
-
exception os.error -
Псевдоним для встроенного исключения
OSError.
-
os.name -
Имя импортированного модуля, зависящего от операционной системы. В настоящее время зарегистрированы следующие имена:
'posix','nt','os2','ce','java','riscos'.См. также
sys.platformимеет более тонкую гранулярность.os.uname()предоставляет информацию о версии, зависящую от системы.Модуль
platformпредоставляет подробную проверку идентификации системы.
1. Параметры процесса
Эти функции и данные предоставляют информацию и выполняют операции с текущим процессом и пользователем.
-
os.environ -
Объект отображения, представляющий строковую среду. Например,
environ['HOME']— это путь к вашему домашнему каталогу (в некоторых платформах), и эквивалентенgetenv("HOME")в C.Это отображение фиксируется при первом импорте модуля
os, обычно во время запуска Python в качестве части обработкиsite.py. Изменения среды, внесенные после этого времени, не отражаются вos.environ, за исключением изменений, внесенных путем прямого измененияos.environ.Если платформа поддерживает функцию
putenv(), это отображение может использоваться для изменения среды, а также запроса среды.putenv()будет вызываться автоматически при изменении отображения.Примечание
Прямое вызов
putenv()не изменяетos.environ, поэтому лучше изменитьos.environ.Примечание
В некоторых платформах, включая FreeBSD и Mac OS X, установка
environможет вызвать утечки памяти. Обратитесь к документации системы дляputenv().Если
putenv()не предоставляется, модифицированная копия этого отображения может быть передана соответствующим функциям создания процессов, чтобы заставить дочерние процессы использовать измененную среду.Если платформа поддерживает функцию
unsetenv(), вы можете удалять элементы из этого отображения, чтобы сбросить переменные среды.unsetenv()будет вызываться автоматически при удалении элемента изos.environ, и при вызове одного из методовpop()илиclear().Изменено в версии 2.6: Также сбрасывает переменные среды при вызове
os.environ.clear()иos.environ.pop().
-
os.chdir(path) -
os.fchdir(fd) -
os.getcwd() -
Эти функции описаны в Файлы и каталоги.
-
os.ctermid() -
Возвращает имя файла, соответствующее контролируемому терминалу процесса.
Доступность: Unix.
-
os.getegid() -
Возвращает эффективный идентификатор группы текущего процесса. Это соответствует биту «установить id» для файла, выполняемого в текущем процессе.
Доступность: Unix.
-
os.geteuid() -
Возвращает эффективный идентификатор пользователя текущего процесса.
Доступность: Unix.
-
os.getgid() -
Возвращает реальный идентификатор группы текущего процесса.
Доступность: Unix.
-
os.getgroups() -
Возвращает список дополнительных идентификаторов групп, связанных с текущим процессом.
Доступность: Unix.
Примечание
В Mac OS X поведение
getgroups()несколько отличается от других платформ Unix. Если интерпретатор Python был построен с целевым развертыванием10.5или ранее,getgroups()возвращает список эффективных идентификаторов групп, связанных с текущим пользователем; этот список ограничен определенным числом системных записей, обычно 16, и может быть изменен вызовамиsetgroups(), если достаточно привилегирован. Если он был построен с целевым развертыванием больше10.5,getgroups()возвращает текущий список доступа к группам для пользователя, связанного с эффективным идентификатором пользователя процесса; список доступа к группам может изменяться на протяжении жизни процесса, он не изменяется вызовамиsetgroups(), и его длина не ограничена 16. Значение целевого развертывания,MACOSX_DEPLOYMENT_TARGET, можно получить с помощьюsysconfig.get_config_var().
-
os.initgroups(username, gid) -
Вызывает системную функцию initgroups() для инициализации списка доступа к группам всеми группами, членами которых является указанное имя пользователя, плюс указанный идентификатор группы.
Доступность: Unix.
Добавлен в версии 2.7.
-
os.getlogin() -
Возвращает имя пользователя, вошедшего в систему на контролируемом терминале процесса. Для большинства целей более полезно использовать переменную среды
LOGNAMEдля определения пользователя, илиpwd.getpwuid(os.getuid())[0]для получения имени входа реального идентификатора пользователя процесса.Доступность: Unix.
-
os.getpgid(pid) -
Возвращает идентификатор группы процессов процесса с идентификатором процесса pid. Если pid равно 0, возвращается идентификатор группы процессов текущего процесса.
Доступность: Unix.
Добавлен в версии 2.3.
-
os.getpgrp() -
Возвращает идентификатор текущей группы процессов.
Доступность: Unix.
-
os.getpid() -
Возвращает текущий идентификатор процесса.
Доступность: Unix, Windows.
-
os.getppid() -
Возвращает идентификатор процесса родителя.
Доступность: Unix.
-
os.getresuid() -
Возвращает кортеж (ruid, euid, suid), обозначающий реальный, эффективный и сохранённый идентификаторы пользователя текущего процесса.
Доступность: Unix.
Добавлен в версии 2.7.
-
os.getresgid() -
Возвращает кортеж (rgid, egid, sgid), определяющий реальный, эффективный и сохранённый идентификаторы группы текущего процесса.
Доступность: Unix.
Новая в версии 2.7.
-
os.getuid() -
Возвращает реальный идентификатор пользователя текущего процесса.
Доступность: Unix.
-
os.getenv(varname[, value]) -
Возвращает значение переменной окружения varname, если она существует, или value, если нет. value по умолчанию равно
None.Доступность: большинство вариантов Unix, Windows.
-
os.putenv(varname, value) -
Устанавливает значение переменной окружения с именем varname в строку value. Такие изменения в окружении влияют на дочерние процессы, запущенные с помощью
os.system(),popen()илиfork()иexecv().Доступность: большинство вариантов Unix, Windows.
Примечание
На некоторых платформах, включая FreeBSD и Mac OS X, установка
environможет привести к утечке памяти. Обратитесь к документации системы для putenv.Когда
putenv()поддерживается, присваивания элементам вos.environавтоматически переводятся в соответствующие вызовыputenv(); однако, вызовыputenv()не обновляютos.environ, поэтому предпочтительнее присваивать значения элементамos.environ.
-
os.setegid(egid) -
Устанавливает эффективный идентификатор группы текущего процесса.
Доступность: Unix.
-
os.seteuid(euid) -
Устанавливает эффективный идентификатор пользователя текущего процесса.
Доступность: Unix.
-
os.setgid(gid) -
Устанавливает идентификатор группы текущего процесса.
Доступность: Unix.
-
os.setgroups(groups) -
Устанавливает список дополнительных идентификаторов групп, связанных с текущим процессом, в groups. groups должен быть последовательностью, а каждый элемент должен быть целым числом, определяющим группу. Эта операция обычно доступна только суперпользователю.
Доступность: Unix.
Новая в версии 2.2.
Примечание
В Mac OS X длина groups не должна превышать системно определенного максимального количества эффективных идентификаторов групп, обычно 16. См. документацию по
getgroups()для случаев, когда она может не вернуть тот же список групп, что и установленный с помощью setgroups().
-
os.setpgrp() -
Вызывает системный вызов
setpgrp()илиsetpgrp(0, 0)в зависимости от реализации (если есть). См. руководство по Unix для семантики.Доступность: Unix.
-
os.setpgid(pid, pgrp) -
Вызывает системный вызов
setpgid()для установки идентификатора группы процессов для процесса с идентификатором pid в группу процессов с идентификатором pgrp. См. руководство по Unix для семантики.Доступность: Unix.
-
os.setregid(rgid, egid) -
Устанавливает реальный и эффективный идентификаторы группы текущего процесса.
Доступность: Unix.
-
os.setresgid(rgid, egid, sgid) -
Устанавливает реальный, эффективный и сохранённый идентификаторы группы текущего процесса.
Доступность: Unix.
Новая в версии 2.7.
-
os.setresuid(ruid, euid, suid) -
Устанавливает реальный, эффективный и сохранённый идентификаторы пользователя текущего процесса.
Доступность: Unix.
Новая в версии 2.7.
-
os.setreuid(ruid, euid) -
Устанавливает реальный и эффективный идентификаторы пользователя текущего процесса.
Доступность: Unix.
-
os.getsid(pid) -
Вызывает системный вызов
getsid(). См. руководство по Unix для семантики.Доступность: Unix.
Новая в версии 2.4.
-
os.setsid() -
Вызывает системный вызов
setsid(). См. руководство по Unix для семантики.Доступность: Unix.
-
os.setuid(uid) -
Устанавливает идентификатор пользователя текущего процесса.
Доступность: Unix.
-
os.strerror(code) -
Возвращает сообщение об ошибке, соответствующее коду ошибки в code. На платформах, где
strerror()возвращаетNULLпри неизвестном коде ошибки, поднимаетсяValueError.Доступность: Unix, Windows.
-
os.umask(mask) -
Устанавливает текущую числовую маску umask и возвращает предыдущую маску.
Доступность: Unix, Windows.
-
os.uname() -
Возвращает 5-кортеж, содержащий информацию, идентифицирующую текущую операционную систему. Кортеж содержит 5 строк:
(sysname, nodename, release, version, machine). Некоторые системы обрезают имя узла до 8 символов или до ведущего компонента; лучшим способом получить имя хоста являетсяsocket.gethostname()или дажеsocket.gethostbyaddr(socket.gethostname()).Доступность: недавние варианты Unix.
-
os.unsetenv(varname) -
Удаляет переменную окружения с именем varname. Такие изменения в окружении влияют на дочерние процессы, запущенные с помощью
os.system(),popen()илиfork()иexecv().Когда
unsetenv()поддерживается, удаление элементов вos.environавтоматически переводится в соответствующий вызовunsetenv(); однако, вызовыunsetenv()не обновляютos.environ, поэтому предпочтительнее удалять элементы изos.environ.Доступность: большинство вариантов Unix, Windows.
2. Создание объектов файлов
Эти функции создают новые объекты файлов. (См. также open().)
-
os.fdopen(fd[, mode[, bufsize]]) -
Возвращает открытый объект файла, связанный с дескриптором файла fd. Аргументы mode и bufsize имеют такое же значение, как соответствующие аргументы встроенной функции
open(). Еслиfdopen()вызывает исключение, он оставляет fd без изменений (не закрывает).Доступность: Unix, Windows.
Изменено в версии 2.3: Теперь, когда указано, аргумент mode должен начинаться с одной из букв
'r','w', или'a', в противном случае генерируетсяValueError.Изменено в версии 2.5: В Unix, когда аргумент mode начинается с
'a', флаг O_APPEND устанавливается для дескриптора файла (что реализацияfdopen()уже делает на большинстве платформ).
-
os.popen(command[, mode[, bufsize]]) -
Открывает канал к command. Значение возврата — открытый объект файла, подключенный к каналу, который может быть прочитан или записан в зависимости от того, является ли mode равным
'r'(по умолчанию) или'w'. Аргумент bufsize имеет такое же значение, как соответствующий аргумент встроенной функцииopen(). Код завершения команды (закодированный в формате, указанном дляwait()) доступен в качестве значения возврата методаclose()объекта файла, за исключением случая, когда код завершения равен нулю (завершение без ошибок), возвращаетсяNone.Доступность: Unix, Windows.
Устарело начиная с версии 2.6: Эта функция устарела. Используйте модуль
subprocess. Особое внимание обратите на раздел Замена устаревших функций модулем subprocess.Изменено в версии 2.0: Эта функция работала ненадежно под Windows в более ранних версиях Python. Это было связано с использованием функции
_popen()из библиотек, поставляемых с Windows. Более новые версии Python не используют неисправленную реализацию из библиотек Windows.
-
os.tmpfile() -
Возвращает новый объект файла, открытый в режиме обновления (
w+b). У файла нет связанных с ним записей каталога, и он будет автоматически удалён, как только для него не останется дескрипторов файла.Доступность: Unix, Windows.
Существует несколько различных popen*() функций, которые обеспечивают несколько отличающиеся способы создания дочерних процессов.
Устаревшее с версии 2.6: Все функции popen*() устарели. Используйте модуль subprocess.
Для каждой из popen*() вариантов, если указан bufsize, он указывает размер буфера для каналов ввода-вывода. mode, если предоставлен, должен быть строкой 'b' или 't'; в Windows это необходимо для определения, должны ли объекты файлов открываться в двоичном или текстовом режиме. Значение по умолчанию для mode — 't'.
Также, для каждого из этих вариантов, в Unix, cmd может быть последовательностью, в этом случае аргументы будут переданы непосредственно программе без вмешательства оболочки (как и с os.spawnv()). Если cmd — строка, она будет передана оболочке (как и с os.system()).
Эти методы не позволяют получить статус завершения дочерних процессов. Единственный способ управлять потоками ввода-вывода и также получать коды возврата — использовать модуль subprocess; они доступны только в Unix.
Для обсуждения возможных ситуаций тупика, связанных с использованием этих функций, см. Проблемы управления потоком.
-
os.popen2(cmd[, mode[, bufsize]]) -
Выполнить cmd как дочерний процесс и вернуть объекты файлов
(child_stdin, child_stdout).Устаревшее с версии 2.6: Эта функция устарела. Используйте модуль
subprocess. Обратите особое внимание на раздел Замена устаревших функций модулем subprocess.Доступность: Unix, Windows.
Введено в версии 2.0.
-
os.popen3(cmd[, mode[, bufsize]]) -
Выполнить cmd как дочерний процесс и вернуть объекты файлов
(child_stdin, child_stdout, child_stderr).Устаревшее с версии 2.6: Эта функция устарела. Используйте модуль
subprocess. Обратите особое внимание на раздел Замена устаревших функций модулем subprocess.Доступность: Unix, Windows.
Введено в версии 2.0.
-
os.popen4(cmd[, mode[, bufsize]]) -
Выполнить cmd как дочерний процесс и вернуть объекты файлов
(child_stdin, child_stdout_and_stderr).Устаревшее с версии 2.6: Эта функция устарела. Используйте модуль
subprocess. Обратите особое внимание на раздел Замена устаревших функций модулем subprocess.Доступность: Unix, Windows.
Введено в версии 2.0.
(Обратите внимание, что child_stdin, child_stdout, and child_stderr названы с точки зрения дочернего процесса, так что child_stdin — стандартный ввод дочернего процесса.)
Эта функциональность также доступна в модуле popen2 с использованием функций с одинаковыми именами, но значения возврата этих функций имеют другой порядок.
3. Операции с дескрипторами файлов
Эти функции работают с потоками ввода-вывода, ссылаясь на них с помощью дескрипторов файлов.
Дескрипторы файлов — это небольшие целые числа, соответствующие файлу, который был открыт текущим процессом. Например, стандартный ввод обычно имеет дескриптор файла 0, стандартный вывод — 1, а стандартная ошибка — 2. Дальнейшие файлы, открытые процессом, затем будут назначены 3, 4, 5 и так далее. Название «дескриптор файла» немного вводит в заблуждение; в Unix-платформах сокеты и каналы также ссылаются с помощью дескрипторов файлов.
Метод fileno() можно использовать для получения дескриптора файла, связанного с объектом файла, при необходимости. Обратите внимание, что непосредственное использование дескриптора файла обойдёт методы объекта файла, проигнорировав такие аспекты, как внутренняя буферизация данных.
-
os.close(fd) -
Закрыть дескриптор файла fd.
Доступность: Unix, Windows.
-
os.closerange(fd_low, fd_high) -
Закрыть все дескрипторы файлов от fd_low (включительно) до fd_high (исключительно), игнорируя ошибки. Эквивалентно:
for fd in xrange(fd_low, fd_high): try: os.close(fd) except OSError: passДоступность: Unix, Windows.
Введено в версии 2.6.
-
os.dup(fd) -
Возвращает дубликат дескриптора файла fd.
Доступность: Unix, Windows.
-
os.dup2(fd, fd2) -
Дублирует дескриптор файла fd в fd2, предварительно закрывая последний, если необходимо.
Доступность: Unix, Windows.
-
os.fchmod(fd, mode) -
Изменить режим файла, заданного fd, на числовой mode. См. документацию для
chmod()для возможных значений mode.Доступность: Unix.
Введено в версии 2.6.
-
os.fchown(fd, uid, gid) -
Изменить владельца и группу файла, заданного fd, на числовые uid и gid. Чтобы оставить одно из идентификаторов без изменений, установите его в -1.
Доступность: Unix.
Введено в версии 2.6.
-
os.fdatasync(fd) -
Принудительно записывает файл с дескриптором fd на диск. Не принуждает обновление метаданных.
Доступность: Unix.
Примечание
Эта функция недоступна в MacOS.
-
os.fpathconf(fd, name) -
Возвращает системную конфигурационную информацию, относящуюся к открытому файлу. name задаёт конфигурационное значение для извлечения; это может быть строка, представляющая имя определённого системного значения; эти имена указаны в ряде стандартов (POSIX.1, Unix 95, Unix 98 и др.). Некоторые платформы определяют также дополнительные имена. Известные имена хостовой операционной системы приведены в словаре
pathconf_names. Для конфигурационных переменных, не включённых в это отображение, передача целого числа для name также принимается.Если name является строкой и не известна, возбуждается
ValueError. Если конкретное значение для name не поддерживается хостовой системой, даже если оно включено вpathconf_names, возбуждаетсяOSErrorс кодом ошибкиerrno.EINVAL.Доступность: Unix.
-
os.fstat(fd) -
Возвращает статус для дескриптора файла fd, как
stat().Доступность: Unix, Windows.
-
os.fstatvfs(fd) -
Возвращает информацию о файловой системе, содержащей файл, связанный с дескриптором файла fd, как
statvfs().Доступность: Unix.
-
os.fsync(fd) -
Принудительно записывает файл с дескриптором fd на диск. В Unix это вызывает функцию
fsync(); в Windows — функцию MS_commit().Если вы начинаете с объекта Python файла f, сначала выполните
f.flush(), а затемos.fsync(f.fileno()), чтобы убедиться, что все внутренние буферы, связанные с f, записаны на диск.Доступность: Unix и Windows начиная с 2.2.3.
-
os.ftruncate(fd, length) -
Усекает файл, соответствующий дескриптору файла fd, так что его размер не превышает length байт.
Доступность: Unix.
-
os.isatty(fd) -
Возвращает
True, если дескриптор файла fd открыт и подключён к устройству tty(-подобному), иначеFalse.
-
os.lseek(fd, pos, how) -
Устанавливает текущую позицию дескриптора файла fd в позицию pos, модифицированную how:
SEEK_SETили0для установки позиции относительно начала файла;SEEK_CURили1для установки позиции относительно текущей позиции;SEEK_ENDили2для установки позиции относительно конца файла. Возвращает новую позицию курсора в байтах, начиная с начала.Доступность: Unix, Windows.
-
os.SEEK_SET -
os.SEEK_CUR -
os.SEEK_END -
Параметры функции
lseek(). Их значения соответственно равны 0, 1 и 2.Доступность: Windows, Unix.
Введено в версии 2.5.
-
os.open(file, flags[, mode]) -
Открывает файл file и устанавливает различные флаги в соответствии с flags и, возможно, режим в соответствии с mode. По умолчанию mode равен
0777(восьмерично), и сначала применяется текущее значение umask. Возвращает дескриптор файла для вновь открытого файла.Описание значений флагов и режимов см. в документации C run-time; константы флагов (например,
O_RDONLYиO_WRONLY) также определены в этом модуле (см. константы флагов open()). В частности, в Windows требуется добавитьO_BINARYдля открытия файлов в двоичном режиме.Доступность: Unix, Windows.
-
os.openpty() -
Открывает новую пару псевдотерминалов. Возвращает пару дескрипторов файлов
(master, slave)для pty и tty соответственно. Для (незначительно) более портабельного подхода используйте модульpty.Доступность: некоторые варианты Unix.
-
os.pipe() -
Создаёт канал. Возвращает пару дескрипторов файлов
(r, w), используемых для чтения и записи соответственно.Доступность: Unix, Windows.
-
os.read(fd, n) -
Считывает не более n байтов из дескриптора файла fd. Возвращает строку, содержащую прочитанные байты. Если достигнут конец файла, связанного с fd, возвращается пустая строка.
Доступность: Unix, Windows.
Примечание
Эта функция предназначена для низкоуровневого ввода-вывода и должна применяться к дескриптору файла, возвращаемому функциями
os.open()илиpipe(). Для чтения «объекта файла», возвращаемого встроенной функциейopen()илиpopen()илиfdopen(), илиsys.stdin, используйте его методыread()илиreadline().
-
os.tcgetpgrp(fd) -
Возвращает группу процессов, связанную с терминалом, заданным fd (открытый дескриптор файла, возвращаемый
os.open()).Доступность: Unix.
-
os.tcsetpgrp(fd, pg) -
Устанавливает группу процессов, связанную с терминалом, заданным fd (открытый дескриптор файла, возвращаемый
os.open()) на pg.Доступность: Unix.
-
os.ttyname(fd) -
Возвращает строку, которая определяет устройство терминала, связанное с дескриптором файла fd. Если fd не связан с устройством терминала, генерируется исключение.
Доступность: Unix.
-
os.write(fd, str) -
Записывает строку str в дескриптор файла fd. Возвращает количество байтов, фактически записанных.
Доступность: Unix, Windows.
Примечание
Эта функция предназначена для низкоуровневого ввода-вывода и должна применяться к дескриптору файла, возвращаемому
os.open()илиpipe(). Для записи в «объект файла», возвращаемый встроенной функциейopen()илиpopen()илиfdopen(), илиsys.stdoutилиsys.stderr, используйте его методwrite().
3.1. open() константы флагов
Следующие константы являются параметрами для параметра flags функции open(). Они могут быть объединены с использованием побитового оператора OR |. Некоторые из них недоступны на всех платформах. Для описаний их доступности и использования см. страницу руководства open(2) для Unix или MSDN для Windows.
-
os.O_RDONLY -
os.O_WRONLY -
os.O_RDWR -
os.O_APPEND -
os.O_CREAT -
os.O_EXCL -
os.O_TRUNC -
Вышеперечисленные константы доступны в Unix и Windows.
-
os.O_DSYNC -
os.O_RSYNC -
os.O_SYNC -
os.O_NDELAY -
os.O_NONBLOCK -
os.O_NOCTTY -
Вышеперечисленные константы доступны только в Unix.
-
os.O_BINARY -
os.O_NOINHERIT -
os.O_SHORT_LIVED -
os.O_TEMPORARY -
os.O_RANDOM -
os.O_SEQUENTIAL -
os.O_TEXT -
Вышеперечисленные константы доступны только в Windows.
-
os.O_ASYNC -
os.O_DIRECT -
os.O_DIRECTORY -
os.O_NOFOLLOW -
os.O_NOATIME -
os.O_SHLOCK -
os.O_EXLOCK -
Вышеперечисленные константы являются расширениями и отсутствуют, если они не определены библиотекой C.
4. Файлы и каталоги
-
os.access(path, mode) -
Используйте реальные uid/gid для проверки доступа к path. Обратите внимание, что большинство операций используют эффективные uid/gid, поэтому данная функция может быть использована в среде suid/sgid для проверки, имеет ли вызывающий пользователь указанный доступ к path. mode должен быть
F_OKдля проверки существования path, или может быть включённым ИЛИ одного или более изR_OK,W_OKиX_OKдля проверки разрешений. ВозвращаетTrue, если доступ разрешён, иFalse, если нет. Для получения дополнительной информации см. страницу руководства Unix access(2).Доступность: Unix, Windows.
Примечание
Использование
access()для проверки авторизации пользователя, например, для открытия файла перед его фактическим открытием с помощьюopen(), создаёт уязвимость, так как пользователь может использовать короткий промежуток времени между проверкой и открытием файла для его изменения. Предпочтительнее использовать методы EAFP.if os.access("myfile", os.R_OK): with open("myfile") as fp: return fp.read() return "some default data"лучше переписать как:
try: fp = open("myfile") except IOError as e: if e.errno == errno.EACCES: return "some default data" # Not a permission error. raise else: with fp: return fp.read()Примечание
Операции ввода-вывода могут завершиться ошибкой даже тогда, когда
access()указывает на их успешное выполнение, особенно для операций с сетевыми файловыми системами, которые могут иметь семантику разрешений, выходящую за рамки обычной модели битов разрешений POSIX.
-
os.F_OK -
Значение, которое необходимо передать в качестве параметра mode функции
access()для проверки существования path.
-
os.R_OK -
Значение, которое нужно включить в параметр mode функции
access()для проверки возможности чтения path.
-
os.W_OK -
Значение, которое нужно включить в параметр mode функции
access()для проверки возможности записи в path.
-
os.X_OK -
Значение, которое необходимо включить в параметр mode функции
access()для определения возможности выполнения path.
-
os.chdir(path) -
Изменить текущую рабочую директорию на path.
Доступность: Unix, Windows.
-
os.fchdir(fd) -
Изменить текущую рабочую директорию на директорию, представленную дескриптором файла fd. Дескриптор должен ссылаться на открытую директорию, а не на открытый файл.
Доступность: Unix.
Новая функция в версии 2.3.
-
os.getcwd() -
Возвращает строку, представляющую текущую рабочую директорию.
Доступность: Unix, Windows.
-
os.getcwdu() -
Возвращает объект Unicode, представляющий текущую рабочую директорию.
Доступность: Unix, Windows.
Новая функция в версии 2.3.
-
os.chflags(path, flags) -
Установить флаги path на числовое значение flags. flags может принимать комбинацию (побитовое ИЛИ) следующих значений (определены в модуле
stat):stat.UF_NODUMPstat.UF_IMMUTABLEstat.UF_APPENDstat.UF_OPAQUEstat.UF_NOUNLINKstat.UF_COMPRESSEDstat.UF_HIDDENstat.SF_ARCHIVEDstat.SF_IMMUTABLEstat.SF_APPENDstat.SF_NOUNLINKstat.SF_SNAPSHOT
Доступность: Unix.
Новая функция в версии 2.6.
-
os.chroot(path) -
Изменить корневую директорию текущего процесса на path. Доступность: Unix.
Новая функция в версии 2.2.
-
os.chmod(path, mode) -
Изменить права доступа к path на числовое значение mode. mode может принимать одно из следующих значений (определены в модуле
stat) или их побитовые комбинации:stat.S_ISUIDstat.S_ISGIDstat.S_ENFMTstat.S_ISVTXstat.S_IREADstat.S_IWRITEstat.S_IEXECstat.S_IRWXUstat.S_IRUSRstat.S_IWUSRstat.S_IXUSRstat.S_IRWXGstat.S_IRGRPstat.S_IWGRPstat.S_IXGRPstat.S_IRWXOstat.S_IROTHstat.S_IWOTHstat.S_IXOTH
Доступность: Unix, Windows.
Примечание
Несмотря на то, что Windows поддерживает
chmod(), вы можете установить только атрибут файла «только для чтения» с его помощью (через константыstat.S_IWRITEиstat.S_IREADили соответствующее целое значение). Все остальные биты игнорируются.
-
os.chown(path, uid, gid) -
Изменить владельца и группу path на числовые значения uid и gid. Чтобы оставить одно из значений неизменённым, установите его значение в -1.
Доступность: Unix.
-
os.lchflags(path, flags) -
Установить флаги path на числовое значение flags, как в
chflags(), но не следовать символичным ссылкам.Доступность: Unix.
Новая функция в версии 2.6.
-
os.lchmod(path, mode) -
Изменить права доступа к path на числовое значение mode. Если path — символическая ссылка, это повлияет на символическую ссылку, а не на целевой объект. См. документацию для
chmod()для возможных значений mode.Доступность: Unix.
Новая функция в версии 2.6.
-
os.lchown(path, uid, gid) -
Изменить владельца и группу path на числовые значения uid и gid. Данная функция не следует символическим ссылкам.
Доступность: Unix.
Новая функция в версии 2.3.
-
os.link(source, link_name) -
Создать жёсткую ссылку, указывающую на source и именованную link_name.
Доступность: Unix.
-
os.listdir(path) -
Возвращает список имён записей в каталоге, заданном параметром path. Список имеет произвольный порядок. Он не включает специальные записи
'.'и'..', даже если они присутствуют в каталоге.Доступность: Unix, Windows.
Изменено в версии 2.3: В Windows NT/2k/XP и Unix, если path — объект Unicode, результат будет списком объектов Unicode. Нераспознаваемые имена файлов всё ещё будут возвращены как строковые объекты.
-
os.lstat(path) -
Выполняет эквивалент системного вызова
lstat()для данного пути. Аналогичноstat(), но не следует за символическими ссылками. На платформах, не поддерживающих символические ссылки, это псевдоним дляstat().
-
os.mkfifo(path[, mode]) -
Создаёт FIFO (именованную трубку) с именем path и числовым режимом mode. По умолчанию mode —
0666(восьмеричное). Сначала значение текущей маски umask вычитается из режима.Доступность: Unix.
FIFO — это трубы, к которым можно обращаться как к обычным файлам. FIFO существуют до тех пор, пока они не будут удалены (например, с помощью
os.unlink()). Обычно FIFO используются для согласования между процессами типа «клиент» и «сервер»: сервер открывает FIFO для чтения, а клиент — для записи. Обратите внимание, чтоmkfifo()не открывает FIFO — он только создаёт точку согласования.
-
os.mknod(filename[, mode=0600[, device=0]]) -
Создаёт файловый узел (файл, специальный файл устройства или именованную трубу) с именем filename. mode определяет как разрешения, так и тип узла, комбинируя (побитовым ИЛИ) с одним из
stat.S_IFREG,stat.S_IFCHR,stat.S_IFBLK, иstat.S_IFIFO(эти константы доступны вstat). Дляstat.S_IFCHRиstat.S_IFBLK, device определяет новый созданный специальный файл устройства (вероятно, с помощьюos.makedev()), в противном случае он игнорируется.Добавлено в версии 2.3.
-
os.major(device) -
Извлекает номер основной части устройства из номера сырого устройства (обычно поле
st_devилиst_rdevизstat).Добавлено в версии 2.3.
-
os.minor(device) -
Извлекает номер дополнительной части устройства из номера сырого устройства (обычно поле
st_devилиst_rdevизstat).Добавлено в версии 2.3.
-
os.makedev(major, minor) -
Формирует номер сырого устройства из номеров основной и дополнительной частей устройства.
Добавлено в версии 2.3.
-
os.mkdir(path[, mode]) -
Создаёт каталог с именем path и числовым режимом mode. По умолчанию mode —
0777(восьмеричное). Если каталог уже существует, вызываетсяOSError.На некоторых системах mode игнорируется. Если он используется, значение текущей маски umask сначала вычитается из режима. Если установлены биты, кроме последних 9 (т.е. последние 3 цифры восьмеричного представления mode), их значение зависит от платформы. На некоторых платформах они игнорируются, и вы должны явно вызвать
chmod()для их установки.Также можно создавать временные каталоги; см. модуль
tempfileи функциюtempfile.mkdtemp().Доступность: Unix, Windows.
-
os.makedirs(path[, mode]) -
Рекурсивная функция создания каталогов. Похожа на
mkdir(), но создаёт все промежуточные каталоги, необходимые для создания целевого каталога. Вызывает исключениеerror, если целевой каталог уже существует или не может быть создан. По умолчанию mode —0777(восьмеричное).Параметр mode передаётся в
mkdir(); см. описание mkdir() для интерпретации.Примечание
makedirs()может столкнуться с ошибками, если элементы пути для создания включаютos.pardir.Добавлено в версии 1.5.2.
Изменено в версии 2.3: Эта функция теперь корректно обрабатывает пути UNC.
-
os.pathconf(path, name) -
Возвращает системную конфигурационную информацию, относящуюся к именованному файлу. name указывает конфигурационное значение для извлечения; это может быть строка, являющаяся именем определённого системного значения; эти имена заданы в ряде стандартов (POSIX.1, Unix 95, Unix 98 и других). Некоторые платформы также определяют дополнительные имена. Имена, известные операционной системе, перечислены в словаре
pathconf_names. Для конфигурационных переменных, не включённых в это отображение, в качестве name также принимается целое число.Если name — строка и не известна, вызывается
ValueError. Если конкретное значение для name не поддерживается системой, даже если оно включено вpathconf_names, возникаетOSErrorсerrno.EINVALв качестве кода ошибки.Доступность: Unix.
-
os.pathconf_names -
Словарь, отображающий имена, принимаемые функциями
pathconf()иfpathconf(), на целочисленные значения, определённые для этих имён операционной системой. Это можно использовать для определения набора известных системе имён. Доступность: Unix.
-
os.readlink(path) -
Возвращает строку, представляющую путь, на который указывает символическая ссылка. Результат может быть абсолютным или относительным именем пути; если он относительный, его можно преобразовать в абсолютный путь, используя
os.path.join(os.path.dirname(path), result).Изменено в версии 2.6: Если path — объект Unicode, результат также будет объектом Unicode.
Доступность: Unix.
-
os.remove(path) -
Удаляет (стирает) файл path. Если path — каталог, вызывается
OSError; см.rmdir()ниже для удаления каталога. Это идентично функцииunlink(), описанной ниже. В Windows, при попытке удаления файла, который используется, возникает исключение; в Unix, запись в каталоге удаляется, но выделенная для файла память не становится доступной, пока оригинальный файл не перестанет использоваться.Доступность: Unix, Windows.
-
os.removedirs(path) -
Рекурсивное удаление каталогов. Работает как
rmdir(), за исключением того, что если целевой каталог удалён успешно,removedirs()пытается последовательно удалить все родительские каталоги, упомянутые в path, до возникновения ошибки (которая игнорируется, так как обычно означает, что родительский каталог не пуст). Например,os.removedirs('foo/bar/baz')сначала удалит каталог'foo/bar/baz', а затем удалит'foo/bar'и'foo', если они пустые. ВызываетOSError, если целевой каталог не удалось удалить.Добавлено в версии 1.5.2.
-
os.rename(src, dst) -
Переименовать файл или директорию src в dst. Если dst — директория, будет поднято исключение
OSError. В Unix, если dst существует и является файлом, он будет перезаменён без предупреждения, если у пользователя есть разрешения. Операция может завершиться неудачей на некоторых Unix-системах, если src и dst находятся на разных файловых системах. В случае успеха, переименование будет атомарной операцией (требование POSIX). В Windows, если dst уже существует, будет поднято исключениеOSError, даже если это файл; атомарного переименования, когда dst ссылается на существующий файл, может быть невозможно реализовать.Доступность: Unix, Windows.
-
os.renames(old, new) -
Рекурсивная функция переименования директорий или файлов. Работает как
rename(), за исключением того, что сначала пытается создать все промежуточные директории, необходимые для создания нового пути. После переименования, директории, соответствующие правым частям пути старого имени, будут удалены с помощьюremovedirs().Введено в версии 1.5.2.
Примечание
Эта функция может завершиться неудачей, если новая структура директорий не может быть создана из-за недостатка необходимых разрешений на удаление конечной директории или файла.
-
os.rmdir(path) -
Удалить (стереть) директорию path. Работает только если директория пуста, иначе поднимается исключение
OSError. Для удаления целых древовидных структур директорий можно использоватьshutil.rmtree().Доступность: Unix, Windows.
-
os.stat(path) -
Выполнить эквивалент системного вызова
stat()для данного пути. (Эта функция следует за символическими ссылками; для получения информации о символической ссылке используйтеlstat().)Возвращаемое значение — объект, чьи атрибуты соответствуют членам структуры
stat, а именно:-
st_mode- разрешения доступа, -
st_ino- номер узла, -
st_dev- устройство, -
st_nlink- количество жёстких ссылок, -
st_uid- идентификатор пользователя владельца, -
st_gid- идентификатор группы владельца, -
st_size- размер файла в байтах, -
st_atime- время последнего доступа, -
st_mtime- время последней модификации содержимого, -
st_ctime- зависящее от платформы; время последней модификации метаданных в Unix или время создания в Windows)
Изменено в версии 2.3: Если
stat_float_times()возвращаетTrue, значения времени представлены как числа с плавающей точкой, измеряющие секунды. Если система поддерживает, могут быть представлены доли секунды. Подробнее см.stat_float_times().На некоторых Unix-системах (например, Linux) могут быть доступны также следующие атрибуты:
-
st_blocks- количество блоков по 512 байт, выделенных для файла -
st_blksize- размер блока файловой системы для эффективного ввода-вывода -
st_rdev- тип устройства, если это узловое устройство -
st_flags- пользовательские флаги для файла
На других Unix-системах (например, FreeBSD) могут быть доступны следующие атрибуты (но они могут быть заполнены только если корень пользователя попытается их использовать):
-
st_gen- номер генерации файла -
st_birthtime- время создания файла
В системах RISCOS также доступны следующие атрибуты:
-
st_ftype(тип файла) -
st_attrs(атрибуты) -
st_obtype(тип объекта).
Примечание
Точное значение и разрешение атрибутов
st_atime,st_mtime, иst_ctimeзависят от операционной системы и файловой системы. Например, в Windows-системах, использующих файловые системы FAT или FAT32,st_mtimeимеет разрешение 2 секунды, аst_atime— только 1 день. Смотрите документацию вашей операционной системы для получения подробной информации.Для обеспечения обратной совместимости, возвращаемое значение
stat()также доступно как кортеж, содержащий по крайней мере 10 целых чисел, представляющих наиболее важные (и переносимые) члены структурыstat, в порядкеst_mode,st_ino,st_dev,st_nlink,st_uid,st_gid,st_size,st_atime,st_mtime,st_ctime. Некоторые реализации могут добавить больше элементов в конце.Стандартный модуль
statопределяет функции и константы, которые полезны для извлечения информации из структурыstat. (В Windows некоторые элементы заполнены значениями по умолчанию.)Пример:
>>> import os >>> statinfo = os.stat('somefile.txt') >>> statinfo (33188, 422511, 769, 1, 1032, 100, 926, 1105022698,1105022732, 1105022732) >>> statinfo.st_size 926Доступность: Unix, Windows.
Изменено в версии 2.2: Добавлен доступ к значениям как атрибутам возвращаемого объекта.
Изменено в версии 2.5: Добавлены
st_genиst_birthtime. -
-
os.stat_float_times([newvalue]) -
Определить, представляют ли
stat_resultвременные метки в виде объектов с плавающей точкой. Если newvalue равноTrue, последующие вызовыstat()вернут значения с плавающей точкой, если равноFalse, последующие вызовы вернут целые числа. Если newvalue опущен, возвращается текущее значение.Для совместимости со старыми версиями Python, обращение к
stat_resultкак к кортежу всегда возвращает целые числа.Изменено в версии 2.5: Python теперь по умолчанию возвращает значения с плавающей точкой. Приложения, которые не работают корректно с временными метками с плавающей точкой, могут использовать эту функцию для восстановления старого поведения.
Разрешение временных меток (то есть наименьшая возможная доля) зависит от системы. Некоторые системы поддерживают только разрешение до секунд; в этих системах дробная часть всегда будет равна нулю.
Рекомендуется изменять это значение только во время запуска программы в модуле __main__; библиотеки никогда не должны изменять это значение. Если приложение использует библиотеку, которая работает неправильно, если обрабатываются временные метки с плавающей точкой, это приложение должно отключить эту функцию до тех пор, пока библиотека не будет исправлена.
-
os.statvfs(path) -
Выполнить системный вызов
statvfs()для данного пути. Возвращаемое значение — объект, чьи атрибуты описывают файловую систему по данному пути и соответствуют членам структурыstatvfs, а именно:f_bsize,f_frsize,f_blocks,f_bfree,f_bavail,f_files,f_ffree,f_favail,f_flag,f_namemax.Для обеспечения обратной совместимости, возвращаемое значение также доступно как кортеж, чьи значения соответствуют атрибутам в указанном выше порядке. Стандартный модуль
statvfsопределяет константы, которые полезны для извлечения информации из структурыstatvfs, когда к ней обращаются как к последовательности; это остаётся полезным при написании кода, который должен работать с версиями Python, не поддерживающими доступ к полям в качестве атрибутов.Доступность: Unix.
Изменено в версии 2.2: Добавлен доступ к значениям как атрибутам возвращаемого объекта.
-
os.symlink(source, link_name) -
Создать символическую ссылку, указывающую на source, с именем link_name.
Доступность: Unix.
-
os.tempnam([dir[, prefix]]) -
Возвращает уникальное имя пути, подходящее для создания временного файла. Будет абсолютным путём, который называет потенциальную запись в каталоге dir или общее место для временных файлов, если dir опущен или
None. Если указано и неNone, prefix используется для предоставления короткого префикса имени файла. Приложения несут ответственность за правильное создание и управление файлами, созданными с помощью путей, возвращаемыхtempnam(); автоматическое удаление не предусмотрено. В Unix, переменная окруженияTMPDIRпереопределяет dir, а в Windows используетсяTMP. Конкретное поведение этой функции зависит от реализации C-библиотеки; некоторые аспекты недостаточно подробно описаны в документации системы.Предупреждение
Использование
tempnam()уязвимо для атак с помощью символических ссылок; рассмотрите использованиеtmpfile()(раздел Создание объектов файлов) вместо него.Доступность: Unix, Windows.
-
os.tmpnam() -
Возвращает уникальное имя пути, подходящее для создания временного файла. Это будет абсолютный путь, который называет потенциальную запись каталога в общем месте для временных файлов. Приложения отвечают за правильное создание и управление файлами, созданными с использованием путей, возвращаемых
tmpnam(); автоматическое очищение не предоставляется.Предупреждение
Использование
tmpnam()уязвимо к атакам с использованием символических ссылок; рассмотрите использованиеtmpfile()(раздел Создание объектов файлов) вместо него.Доступность: Unix, Windows. Вероятно, эту функцию не следует использовать в Windows: реализация Microsoft
tmpnam()всегда создает имя в корневом каталоге текущего диска, и это обычно неподходящее место для временного файла (в зависимости от привилегий, вам может даже не удаться открыть файл с этим именем).
-
os.TMP_MAX -
Максимальное количество уникальных имен, которые
tmpnam()сгенерирует перед повторным использованием имен.
-
os.unlink(path) -
Удалить (стереть) файл path. Это та же функция, что и
remove(); имяunlink()— его традиционное имя в Unix.Доступность: Unix, Windows.
-
os.utime(path, times) -
Установить время доступа и изменения файла, указанного в path. Если times —
None, тогда время доступа и изменения файла устанавливаются на текущее время. (Эффект аналогичен запуску программы Unix touch в пути.) В противном случае times должен быть 2-кортежем чисел, вида(atime, mtime), который используется для установки времени доступа и изменения, соответственно. Возможность передачи каталога в path зависит от того, как операционная система реализует каталоги как файлы (например, Windows так не делает). Обратите внимание, что точные времена, установленные здесь, могут не быть возвращены последующим вызовомstat(), в зависимости от разрешения, с которым ваша операционная система записывает время доступа и изменения; см.stat().Изменено в версии 2.0: Добавлена поддержка
Noneдля times.Доступность: Unix, Windows.
-
os.walk(top, topdown=True, onerror=None, followlinks=False) -
Генерирует имена файлов в древовидной структуре каталогов, проходя по дереву сверху вниз или снизу вверх. Для каждого каталога в дереве, укорененном в каталоге top (включая top), она возвращает 3-кортеж
(dirpath, dirnames, filenames).dirpath — строка, путь к каталогу. dirnames — список имен подкаталогов в dirpath (исключая
'.'и'..'). filenames — список имен файлов, которые не являются каталогами, в dirpath. Обратите внимание, что имена в списках не содержат компонентов пути. Чтобы получить полный путь (начинающийся с top) к файлу или каталогу в dirpath, сделайтеos.path.join(dirpath, name).Если необязательный аргумент topdown равен
Trueили не указан, тройка для каталога генерируется до троек для любого из его подкаталогов (каталоги генерируются сверху вниз). Если topdown равенFalse, тройка для каталога генерируется после троек для всех его подкаталогов (каталоги генерируются снизу вверх). Независимо от значения topdown, список подкаталогов извлекается перед тем, как генерируются кортежи для каталога и его подкаталогов.Когда topdown равен
True, вызывающий может изменить список dirnames на месте (возможно, используяdelили присваивание среза), иwalk()будет рекурсивно посещать только те подкаталоги, имена которых останутся в dirnames; это можно использовать для сокращения поиска, наложения конкретного порядка посещения или даже для информированияwalk()о каталогах, которые вызывающий создает или переименовывает до возобновленияwalk()снова. Изменение dirnames, когда topdown равноFalseне влияет на поведение обхода, потому что в режиме снизу вверх каталоги в dirnames генерируются до того, как сам dirpath генерируется.По умолчанию ошибки из вызова
listdir()игнорируются. Если указан необязательный аргумент onerror, он должен быть функцией; она вызывается с одним аргументом — экземпляромOSError. Она может сообщить об ошибке, чтобы продолжить обход, или вызвать исключение для прерывания обхода. Обратите внимание, что имя файла доступно как атрибутfilenameобъекта исключения.По умолчанию
walk()не будет проходить в подкаталоги, которые являются символическими ссылками, разрешающимися в каталоги. Установите followlinks вTrueдля посещения каталогов, на которые указывают символические ссылки, на системах, которые их поддерживают.Добавлено в версии 2.6: Параметр followlinks.
Примечание
Обратите внимание, что установка followlinks в
Trueможет привести к бесконечной рекурсии, если ссылка указывает на родительский каталог самого себя.walk()не отслеживает уже посещенные каталоги.Примечание
Если вы передаете относительный путь, не изменяйте текущий рабочий каталог между возобновлениями
walk().walk()никогда не изменяет текущий каталог и предполагает, что его вызывающий тоже этого не делает.Этот пример отображает количество байтов, занимаемых файлами, которые не являются каталогами, в каждом каталоге под исходным каталогом, за исключением того, что он не смотрит в подкаталог CVS:
import os from os.path import join, getsize for root, dirs, files in os.walk('python/Lib/email'): print root, "consumes", print sum(getsize(join(root, name)) for name in files), print "bytes in", len(files), "non-directory files" if 'CVS' in dirs: dirs.remove('CVS') # don't visit CVS directoriesВ следующем примере проход по дереву снизу вверх необходим:
rmdir()не позволяет удалять каталог до тех пор, пока он не станет пустым:# Delete everything reachable from the directory named in "top", # assuming there are no symbolic links. # CAUTION: This is dangerous! For example, if top == '/', it # could delete all your disk files. import os for root, dirs, files in os.walk(top, topdown=False): for name in files: os.remove(os.path.join(root, name)) for name in dirs: os.rmdir(os.path.join(root, name))Добавлено в версии 2.3.
5. Управление процессами
Эти функции могут использоваться для создания и управления процессами.
Различные функции exec* принимают список аргументов для новой программы, загруженной в процесс. В каждом случае первый из этих аргументов передается новой программе в качестве собственного имени, а не как аргумент, который мог набрать пользователь в командной строке. Для программиста на C это argv[0] передаваемый в main() программы. Например, os.execv('/bin/echo',
['foo', 'bar']) будет печатать только bar в стандартный вывод; foo будет как будто проигнорирован.
-
os.abort() -
Генерирует сигнал
SIGABRTдля текущего процесса. В Unix поведение по умолчанию — создание дампа ядра; в Windows процесс немедленно возвращает код завершения3. Обратите внимание, что вызов этой функции не вызовет обработчик сигналов Python, зарегистрированный дляSIGABRTс помощьюsignal.signal().Доступность: Unix, Windows.
-
os.execl(path, arg0, arg1, ...) -
os.execle(path, arg0, arg1, ..., env) -
os.execlp(file, arg0, arg1, ...) -
os.execlpe(file, arg0, arg1, ..., env) -
os.execv(path, args) -
os.execve(path, args, env) -
os.execvp(file, args) -
os.execvpe(file, args, env) -
Эти функции выполняют новую программу, заменяя текущий процесс; они не возвращают значение. В Unix новая исполняемая программа загружается в текущий процесс и будет иметь тот же идентификатор процесса, что и вызывающий процесс. Ошибки будут сообщаться как исключения
OSError.Текущий процесс заменяется немедленно. Объекты и дескрипторы открытых файлов не сбрасываются, поэтому, если в этих открытых файлах может быть буферизованные данные, необходимо сбросить их, используя
sys.stdout.flush()илиos.fsync()перед вызовом функцииexec*.Варианты функций
exec*с "l" и "v" различаются тем, как передаются аргументы командной строки. Варианты с "l" могут быть проще в работе, если количество параметров фиксировано при написании кода; отдельные параметры просто становятся дополнительными параметрами для функцийexecl*(). Варианты с "v" подходят, когда количество параметров переменное, а аргументы передаются в списке или кортеже в качестве параметра args. В любом случае аргументы дочернего процесса должны начинаться с имени запускаемой команды, но это не проверяется.Варианты, включающие «p» в конце (
execlp(),execlpe(),execvp()иexecvpe()) будут использовать переменную окруженияPATHдля поиска файла program. Когда среда заменяется (используя один из вариантовexec*e, обсуждаемых в следующем абзаце), новая среда используется в качестве источника переменнойPATH. Другие варианты,execl(),execle(),execv()иexecve(), не будут использовать переменнуюPATHдля поиска исполняемого файла; path должен содержать соответствующий абсолютный или относительный путь.Для
execle(),execlpe(),execve()иexecvpe()(обратите внимание, что все они заканчиваются на «e»), параметр env должен быть отображением, используемым для определения переменных среды для нового процесса (они используются вместо среды текущего процесса); функцииexecl(),execlp(),execv()иexecvp()вызывают наследование среды текущего процесса новым процессом.Доступность: Unix, Windows.
-
os._exit(n) -
Завершить процесс со статусом n, не вызывая обработчики очистки, не сбрасывая буферы stdio и т. д.
Доступность: Unix, Windows.
Ниже приведены определённые коды выхода, которые можно использовать с _exit(), хотя они не являются обязательными. Обычно они используются для системных программ, написанных на Python, таких как программа внешней доставки команд почтового сервера.
Примечание
Некоторые из них могут быть недоступны на всех платформах Unix, так как существует определенная вариативность. Эти константы определяются, где они определены основной платформой.
-
os.EX_OK -
Код выхода, означающий, что ошибки не произошло.
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_USAGE -
Код выхода, означающий, что команда использовалась неправильно, например, при указании неверного количества аргументов.
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_DATAERR -
Код выхода, означающий, что данные ввода были некорректны.
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_NOINPUT -
Код выхода, означающий, что файл ввода не существовал или был недоступен для чтения.
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_NOUSER -
Код выхода, означающий, что указанный пользователь не существует.
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_NOHOST -
Код выхода, означающий, что указанный хост не существует.
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_UNAVAILABLE -
Код выхода, означающий, что необходимая служба недоступна.
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_SOFTWARE -
Код выхода, означающий, что была обнаружена внутренняя ошибка программного обеспечения.
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_OSERR -
Код выхода, означающий, что была обнаружена ошибка операционной системы, например, невозможность выполнить fork или создать pipe.
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_OSFILE -
Код выхода, означающий, что какой-то системный файл не существовал, не мог быть открыт или имел какой-то другой вид ошибки.
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_CANTCREAT -
Код выхода, означающий, что указанный пользователем выходной файл не может быть создан.
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_IOERR -
Код выхода, означающий, что произошла ошибка при выполнении ввода-вывода с некоторым файлом.
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_TEMPFAIL -
Код выхода, означающий временный сбой. Это указывает на то, что не является истинной ошибкой, например, сетевое соединение, которое не могло быть установлено во время повторной операции.
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_PROTOCOL -
Код выхода, означающий, что обмен протоколами был незаконным, недействительным или не понят.
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_NOPERM -
Код выхода, означающий недостаточные права для выполнения операции (но не предназначен для проблем файловой системы).
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_CONFIG -
Код выхода, означающий возникновение ошибки конфигурации.
Доступность: Unix.
Введено в версии 2.3.
-
os.EX_NOTFOUND -
Код выхода, означающий что-то вроде «элемент не найден».
Доступность: Unix.
Введено в версии 2.3.
-
os.fork() -
Создать дочерний процесс. Вернуть
0в дочернем процессе и идентификатор дочернего процесса в родительском. При возникновении ошибки, поднимается исключениеOSError.Обратите внимание, что на некоторых платформах, включая FreeBSD <= 6.3, Cygwin и OS/2 EMX, известны проблемы при использовании fork() из потока.
Предупреждение
См.
sslдля приложений, использующих модуль SSL с fork().Доступность: Unix.
-
os.forkpty() -
Создать дочерний процесс, используя новый псевдотерминал в качестве управляющего терминала дочернего процесса. Возвращает пару
(pid, fd), где pid —0в дочернем процессе, новый идентификатор процесса дочернего процесса в родительском процессе, а fd — дескриптор файла главного конца псевдотерминала. Для более переносимого подхода используйте модульpty. В случае ошибки возбуждается исключениеOSError.Доступность: некоторые варианты Unix.
-
os.kill(pid, sig) -
Отправить сигнал sig процессу pid. Константы для конкретных сигналов, доступных на платформе хоста, определены в модуле
signal.Windows: Сигналы
signal.CTRL_C_EVENTиsignal.CTRL_BREAK_EVENTявляются специальными сигналами, которые могут быть отправлены только консольным процессам, разделяющим общее консольное окно, например, некоторым дочерним процессам. Любое другое значение sig заставит процесс быть безусловно убитым API TerminateProcess, и код выхода будет установлен в sig. Windows-версияkill()дополнительно принимает дескрипторы процессов, подлежащих уничтожению.Новое в версии 2.7: Поддержка Windows
-
os.killpg(pgid, sig) -
Отправить сигнал sig группе процессов pgid.
Доступность: Unix.
Новое в версии 2.3.
-
os.nice(increment) -
Добавить increment к «вежливости» процесса. Возвращает новую вежливость.
Доступность: Unix.
-
os.plock(op) -
Заблокировать сегменты программы в памяти. Значение op (определенное в
<sys/lock.h>) определяет, какие сегменты будут заблокированы.Доступность: Unix.
-
os.popen(...) -
os.popen2(...) -
os.popen3(...) -
os.popen4(...) -
Запустить дочерние процессы, вернув открытые каналы связи. Эти функции описаны в разделе Создание объектов файлов.
-
os.spawnl(mode, path, ...) -
os.spawnle(mode, path, ..., env) -
os.spawnlp(mode, file, ...) -
os.spawnlpe(mode, file, ..., env) -
os.spawnv(mode, path, args) -
os.spawnve(mode, path, args, env) -
os.spawnvp(mode, file, args) -
os.spawnvpe(mode, file, args, env) -
Выполнить программу path в новом процессе.
(Обратите внимание, что модуль
subprocessпредоставляет более мощные средства для запуска новых процессов и получения их результатов; использование этого модуля предпочтительнее использования этих функций. Особенно обратите внимание на раздел Замена устаревших функций модулем subprocess.)Если mode —
P_NOWAIT, эта функция возвращает идентификатор процесса нового процесса; если mode —P_WAIT, возвращает код завершения процесса, если он завершается нормально, или-signal, где signal — сигнал, который убил процесс. В Windows идентификатор процесса фактически будет дескриптором процесса, поэтому его можно использовать с функциейwaitpid().Варианты «l» и «v» функций
spawn*различаются тем, как передаются аргументы командной строки. Варианты «l» могут быть проще в использовании, если число параметров фиксировано при написании кода; отдельные параметры просто становятся дополнительными параметрами для функцийspawnl*(). Варианты «v» подходят, когда число параметров переменное, а аргументы передаются в списке или кортеже в качестве параметра args. В любом случае аргументы дочернего процесса должны начинаться с имени выполняемой команды.Варианты, которые включают вторую «p» в конце (
spawnlp(),spawnlpe(),spawnvp()иspawnvpe()) будут использовать переменную средыPATHдля поиска программы file. Когда среда заменяется (с использованием одного из вариантовspawn*e, обсуждаемых в следующем абзаце), новая среда используется в качестве источника переменнойPATH. Другие варианты,spawnl(),spawnle(),spawnv()иspawnve(), не будут использовать переменнуюPATHдля поиска исполняемого файла; path должен содержать соответствующий абсолютный или относительный путь.Для
spawnle(),spawnlpe(),spawnve()иspawnvpe()(обратите внимание, что все они заканчиваются на «e»), параметр env должен быть отображением, которое используется для определения переменных среды для нового процесса (они используются вместо среды текущего процесса); функцииspawnl(),spawnlp(),spawnv()иspawnvp()заставляют новый процесс унаследовать среду текущего процесса. Обратите внимание, что ключи и значения в словаре env должны быть строками; недопустимые ключи или значения приведут к ошибке функции с возвращаемым значением127.В качестве примера, следующие вызовы
spawnlp()иspawnvpe()эквивалентны:import os os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null') L = ['cp', 'index.html', '/dev/null'] os.spawnvpe(os.P_WAIT, 'cp', L, os.environ)
Доступность: Unix, Windows.
spawnlp(),spawnlpe(),spawnvp()иspawnvpe()недоступны в Windows.spawnle()иspawnve()не потокобезопасны в Windows; мы рекомендуем использовать модульsubprocessвместо них.Новое в версии 1.6.
-
os.P_NOWAIT -
os.P_NOWAITO -
Возможные значения для параметра mode функций семейства
spawn*. Если задано любое из этих значений, функцииspawn*()вернут значение сразу после создания нового процесса с идентификатором процесса в качестве возвращаемого значения.Доступность: Unix, Windows.
Новое в версии 1.6.
-
os.P_WAIT -
Возможные значение для параметра mode функций семейства
spawn*. Если это задано как mode, функцииspawn*()вернут значение не до завершения нового процесса, а вернут код выхода процесса, если запуск успешен, или-signalесли процесс убит сигналом.Доступность: Unix, Windows.
Новое в версии 1.6.
-
os.P_DETACH -
os.P_OVERLAY -
Возможные значения для параметра mode функций семейства
spawn*. Эти значения менее переносимы, чем перечисленные выше.P_DETACHаналогичноP_NOWAIT, но новый процесс отделяется от консоли вызывающего процесса. Если используетсяP_OVERLAY, текущий процесс будет заменён; функцияspawn*()не вернётся.Доступность: Windows.
Новое в версии 1.6.
-
os.startfile(path[, operation]) -
Запустить файл с помощью связанного приложения.
Если operation не указан или
'open', это работает как двойной щелчок по файлу в проводнике Windows или передача имени файла в качестве аргумента команде start из интерактивной командной оболочки: файл открывается с помощью любого приложения (если таковое имеется), связанного с его расширением.Если задано другое значение operation, оно должно быть «глаголом команды», определяющим, что нужно сделать с файлом. Общие глаголы, документированные Microsoft, это
'print'и'edit'(для использования с файлами), а также'explore'и'find'(для использования с каталогами).startfile()возвращает, как только запущенное связанное приложение. Нет возможности ожидать закрытия приложения и нет способа получить код завершения приложения. Параметр path является относительным по отношению к текущей директории. Если вы хотите использовать абсолютный путь, убедитесь, что первый символ не является косой чертой ('/'); функция Win32ShellExecute()не работает, если это так. Используйте функциюos.path.normpath()для обеспечения правильной кодировки пути для Win32.Доступность: Windows.
В версии 2.0.
В версии 2.5: Параметр operation.
-
os.system(command) -
Выполнить команду (строку) в дочерней оболочке. Это реализуется путём вызова стандартной C-функции
system(), и имеет те же ограничения. Изменения вsys.stdinи т. д. не отражаются в среде выполняемой команды.В Unix возвращаемое значение — это код завершения процесса, закодированный в формате, определенном для
wait(). Обратите внимание, что POSIX не определяет значение возвращаемого значения C-функцииsystem(), поэтому возвращаемое значение Python-функции зависит от системы.В Windows возвращаемое значение — это значение, возвращаемое системной оболочкой после выполнения command, заданное переменной среды Windows
COMSPEC: на системах command.com (Windows 95, 98 и ME) это всегда0; на системах cmd.exe (Windows NT, 2000 и XP) это код завершения выполненной команды; на системах, использующих нестандартную оболочку, см. документацию вашей оболочки.Модуль
subprocessпредоставляет более мощные средства для запуска новых процессов и получения их результатов; использование этого модуля предпочтительнее использования этой функции. См. раздел Замена устаревших функций модулем subprocess в документацииsubprocessдля полезных рецептов.Доступность: Unix, Windows.
-
os.times() -
Возвращает 5-кортеж чисел с плавающей точкой, указывающих накопленные (процессорные или другие) времена в секундах. Элементами являются: время пользователя, время системы, время пользователя дочерних процессов, время системы дочерних процессов и прошедшее реальное время с момента фиксированной точки в прошлом, в указанном порядке. Смотрите страницу руководства Unix times(2) или соответствующую документацию Windows Platform API. В Windows заполняются только первые два элемента, остальные равны нулю.
Доступность: Unix, Windows
-
os.wait() -
Ожидать завершения дочернего процесса и вернуть кортеж, содержащий его pid и код завершения: 16-битное число, младший байт которого — номер сигнала, убившего процесс, а старший — код завершения (если номер сигнала равен нулю); старший бит младшего байта установлен, если был создан файл кода.
Доступность: Unix.
-
os.waitpid(pid, options) -
Подробности этой функции различаются в Unix и Windows.
В Unix: Ожидать завершения дочернего процесса, заданного id процесса pid, и вернуть кортеж, содержащий его id процесса и код завершения (закодированный так же, как для
wait()). Семантика вызова зависит от значения целого числа options, которое должно быть0для нормальной работы.Если pid больше
0,waitpid()запрашивает информацию о состоянии этого конкретного процесса. Если pid равно0, запрос относится к состоянию любого дочернего процесса в группе процессов текущего процесса. Если pid равно-1, запрос относится к любому потомку текущего процесса. Если pid меньше-1, запрос состояния относится к любому процессу в группе процессов-pid(абсолютное значение pid).Исключение
OSErrorс значением errno возникает, когда вызов системы возвращает -1.В Windows: Ожидать завершения процесса, заданного дескриптором процесса pid, и вернуть кортеж, содержащий pid и его код завершения, сдвинутый влево на 8 битов (сдвиг упрощает кроссплатформенное использование функции). Значение pid, меньшее или равное
0, не имеет специального значения в Windows и вызывает исключение. Значение целого числа options не влияет. pid может относиться к любому процессу, id которого известен, необязательно к дочернему процессу. Функцииspawn*сP_NOWAITвозвращают подходящие дескрипторы процессов.
-
os.wait3(options) -
Аналогично
waitpid(), за исключением отсутствия аргумента id процесса и возврата кортежа из 3 элементов, содержащего id дочернего процесса, код завершения и информацию об использовании ресурсов. Обратитесь кresource.getrusage()для подробностей об информации об использовании ресурсов. Аргумент option такой же, как предоставляемыйwaitpid()иwait4().Доступность: Unix.
В версии 2.5.
-
os.wait4(pid, options) -
Аналогично
waitpid(), за исключением возврата кортежа из 3 элементов, содержащего id дочернего процесса, код завершения и информацию об использовании ресурсов. Обратитесь кresource.getrusage()для подробностей об информации об использовании ресурсов. Аргументы функцииwait4()такие же, как и предоставляемые функцииwaitpid().Доступность: Unix.
В версии 2.5.
-
os.WNOHANG -
Вариант для
waitpid()для немедленного возврата, если состояние дочернего процесса не доступно немедленно. В этом случае функция возвращает(0, 0).Доступность: Unix.
-
os.WCONTINUED -
Этот параметр заставляет дочерние процессы быть сообщенными, если они были продолжены после остановки управления задачами с момента последнего сообщения о их состоянии.
Доступность: Некоторые системы Unix.
В версии 2.3.
-
os.WUNTRACED -
Этот параметр заставляет дочерние процессы быть сообщенными, если они были остановлены, но их текущее состояние не сообщалось с момента их остановки.
Доступность: Unix.
В версии 2.3.
Следующие функции принимают код состояния процесса, возвращаемый system(), wait() или waitpid() в качестве параметра. Они могут быть использованы для определения состояния процесса.
-
os.WCOREDUMP(status) -
Возвращает
Trueесли для процесса был создан дамп ядра, в противном случае возвращаетFalse.Доступность: Unix.
В версии 2.3.
-
os.WIFCONTINUED(status) -
Возвращает
Trueесли процесс был продолжен после остановки управления задачами, в противном случае возвращаетFalse.Доступность: Unix.
В версии 2.3.
-
os.WIFSTOPPED(status) -
Возвращает
Trueесли процесс был остановлен, в противном случае возвращаетFalse.Доступность: Unix.
-
os.WIFSIGNALED(status) -
Возвращает
True, если процесс завершился из-за сигнала, в противном случае возвращаетFalse.Доступность: Unix.
-
os.WIFEXITED(status) -
Возвращает
True, если процесс завершился с помощью системного вызова exit(2), в противном случае возвращаетFalse.Доступность: Unix.
-
os.WEXITSTATUS(status) -
Если
WIFEXITED(status)истинно, возвращает целочисленный параметр системного вызова exit(2). В противном случае возвращаемое значение не имеет смысла.Доступность: Unix.
-
os.WSTOPSIG(status) -
Возвращает сигнал, который привел к остановке процесса.
Доступность: Unix.
-
os.WTERMSIG(status) -
Возвращает сигнал, который привел к завершению процесса.
Доступность: Unix.
6. Разное системное информация
-
os.confstr(name) -
Возвращает строковые значения конфигурации системы. name задает значение конфигурации для извлечения; это может быть строка, представляющая имя определенного системного значения; эти имена задаются в ряде стандартов (POSIX, Unix 95, Unix 98 и др.). Некоторые платформы также определяют дополнительные имена. Известные имена операционной системы возвращаются в виде ключей в словаре
confstr_names. Для конфигурационных переменных, не включённых в это отображение, также принимается целое число в качестве name.Если значение конфигурации, заданное name, не определено, возвращается
None.Если name является строкой и не известно, возбуждается исключение
ValueError. Если конкретное значение для name не поддерживается системой, даже если оно включено вconfstr_names, возбуждается исключениеOSErrorс кодом ошибкиerrno.EINVAL.Доступность: Unix
-
os.confstr_names -
Словарь, сопоставляющий имена, принятые функцией
confstr(), с целочисленными значениями, определёнными для этих имён операционной системой. Это можно использовать для определения набора известных системе имён.Доступность: Unix.
-
os.getloadavg() -
Возвращает среднее число процессов в очереди выполнения системы за последние 1, 5 и 15 минут или возбуждает
OSError, если среднее время выполнения не было получено.Доступность: Unix.
Новая в версии 2.3.
-
os.sysconf(name) -
Возвращает целочисленные значения системной конфигурации. Если значение конфигурации, заданное name, не определено, возвращается
-1. Комментарии к параметру name дляconfstr()также применимы здесь; словарь, содержащий информацию об известных именах, задаётсяsysconf_names.Доступность: Unix.
-
os.sysconf_names -
Словарь, сопоставляющий имена, принятые функцией
sysconf(), с целочисленными значениями, определёнными для этих имён операционной системой. Это можно использовать для определения набора известных системе имён.Доступность: Unix.
Следующие данные используются для поддержки операций с путями. Они определены для всех платформ.
Операции более высокого уровня с именами путей определены в модуле os.path.
-
os.curdir -
Строковая константа, используемая операционной системой для обозначения текущей директории. Это
'.'для Windows и POSIX. Также доступно черезos.path.
-
os.pardir -
Строковая константа, используемая операционной системой для обозначения родительской директории. Это
'..'для Windows и POSIX. Также доступно черезos.path.
-
os.sep -
Символ, используемый операционной системой для разделения компонентов имени пути. Это
'/'для POSIX и'\\'для Windows. Обратите внимание, что знание этого недостаточно для разбора или конкатенации имён путей — используйтеos.path.split()иos.path.join()— но это иногда полезно. Также доступно черезos.path.
-
os.altsep -
Альтернативный символ, используемый операционной системой для разделения компонентов имени пути, или
Noneесли существует только один разделитель символов. Это установлено в'/'на системах Windows, гдеsepявляется обратной косой чертой. Также доступно черезos.path.
-
os.extsep -
Символ, разделяющий имя базового файла и расширение; например,
'.'вos.py. Также доступно черезos.path.Новая в версии 2.2.
-
os.pathsep -
Символ, традиционно используемый операционной системой для разделения компонентов пути поиска (как в
PATH), таких как':'для POSIX или';'для Windows. Также доступно черезos.path.
-
os.defpath -
Базовый путь поиска, используемый
exec*p*иspawn*p*, если в среде нет ключа'PATH'. Также доступно черезos.path.
-
os.linesep -
Строка, используемая для разделения (или, точнее, завершения) строк на текущей платформе. Это может быть один символ, например,
'\n'для POSIX, или несколько символов, например,'\r\n'для Windows. Не используйте os.linesep в качестве разделителя строк при записи файлов, открытых в текстовом режиме (по умолчанию); используйте вместо этого одиночный'\n'на всех платформах.
-
os.devnull -
Путь к файлу устройства null. Например:
'/dev/null'для POSIX,'nul'для Windows. Также доступно черезos.path.Новая в версии 2.4.
7. Разные функции
-
os.urandom(n) -
Возвращает строку из n случайных байтов, пригодную для криптографических целей.
Эта функция возвращает случайные байты из специфического для ОС источника случайных чисел. Возвращаемые данные должны быть достаточно непредсказуемыми для криптографических применений, хотя их точное качество зависит от реализации ОС. В системе, подобной UNIX, эта функция обращается к
/dev/urandom, а в Windows используетCryptGenRandom(). Если источник случайных чисел не найден, возбуждается исключениеNotImplementedError.Для простого в использовании интерфейса к генератору случайных чисел, предоставляемому вашей платформой, см.
random.SystemRandom.Новая в версии 2.4.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/os.html