справочник по Python. мм isbn 9785932861578 9 785932 861578
Скачать 4.21 Mb.
|
См. также Описание модуля time (стр. 507). Модуль errno Модуль errno определяет символические имена для целочисленных кодов ошибок, возвращаемых различными системными вызовами, в частности теми, которые можно найти в модулях os и socket. Обычно эти коды встре- чаются в атрибуте errno исключения OSError или IOError. Для преобразова- ния кода ошибки в строку с текстом сообщения можно использовать функ- цию os.strerror(). А для преобразования целочисленных кодов ошибок в символические имена можно использовать следующий словарь: errorcode Этот словарь отображает целочисленные коды ошибок в символические имена (такие как ‘EPERM’). Коды ошибок в стандарте POSIX В следующей таблице перечислены символические имена, определяемые стандартом POSIX для обозначения типичных кодов системных ошибок. Коды ошибок, перечисленные здесь, поддерживаются большинством вер- сий UNIX, Macintosh OS-X и Windows. Некоторые версии UNIX могут опре- UNIX, Macintosh OS-X и Windows. Некоторые версии UNIX могут опре- , Macintosh OS-X и Windows. Некоторые версии UNIX могут опре- Macintosh OS-X и Windows. Некоторые версии UNIX могут опре- OS-X и Windows. Некоторые версии UNIX могут опре- OS-X и Windows. Некоторые версии UNIX могут опре- -X и Windows. Некоторые версии UNIX могут опре- X и Windows. Некоторые версии UNIX могут опре- и Windows. Некоторые версии UNIX могут опре- Windows. Некоторые версии UNIX могут опре- . Некоторые версии UNIX могут опре- UNIX могут опре- могут опре- делять дополнительные коды ошибок. Они встречаются достаточно редко и потому не были включены в список. Если возникает подобная ошибка, можно обратиться к словарю errorcode, определить с его помощью соответ- ствующее символическое имя и использовать его в своей программе. Код ошибки Описание E2BIG Слишком длинный список аргументов. EACCES В разрешении отказано. EADDRINUSE Адрес уже используется. EADDRNOTAVAIL Невозможно назначить запрошенный адрес. EAFNOSUPPORT Семейство адресов не поддерживается протоколом. EAGAIN Требуется повторить попытку. EALREADY Операция уже выполняется. EBADF Неверный номер файла. Модуль errno 431 Код ошибки Описание EBUSY У стройство или ресурс занят. ECHILD Нет дочернего процесса. ECONNABORTED Соединение было разорвано. ECONNREFUSED Соединение было отвергнуто. ECONNRESET Соединение было сброшено удаленным узлом. EDEADLK Возникла ситуация взаимоблокировки при попытке за- хватить ресурс. EDEADLOCK Возникла ситуация взаимоблокировки при попытке за- хватить файл. EDESTADDRREQ Не указан адрес назначения. EDOM Математический аргумент за пределами области определе- ния функции. EDQUOT Превышена квота. EEXIST Файл существует. EFAULT Недопустимый адрес. EFBIG Файл слишком большой. EHOSTDOWN Хост не работает. EHOSTUNREACH Нет доступных маршрутов к хосту. EILSEQ Недопустимая последовательность байтов. EINPROGRESS Операция теперь выполняется. EINTR Системный вызов был прерван. EINVAL Недопустимый аргумент. EIO Ошибка ввода-вывода. EISCONN Сокет уже подключен. EISDIR Это каталог. ELOOP Встречено слишком много символических ссылок. EMFILE Слишком много открытых файлов. EMLINK Слишком много ссылок. EMSGSIZE Сообщение слишком длинное. ENETDOWN Сеть не работает. ENETRESET Отказ в соединении от сети. ENETUNREACH Сеть недоступна. ENFILE Таблица файлов переполнена. ENOBUFS Недостаточно места в буфере. ENODEV Нет такого устройства. 432 Глава 19. Службы операционной системы Код ошибки Описание ENOENT Не т такого файла или каталога. ENOEXEC Ошибка формата выполняемого файла. ENOLCK Нет доступных блокировок. ENOMEM Недостаточно памяти. ENOPROTOOPT Протокол недоступен. ENOSPC Недостаточно места на устройстве. ENOSYS Функция не реализована. ENOTCONN Сокет не подключен. ENOTDIR Не каталог. ENOTEMPTY Непустой каталог. ENOTSOCK Не является сокетом. ENOTTY Не является терминалом. ENXIO Неправильный адрес или устройство. EOPNOTSUPP Операция не поддерживается для сокетов. EPERM Операция запрещена. EPFNOSUPPORT Семейство протоколов не поддерживается. EPIPE Разрушенный канал. EPROTONOSUPPORT Протокол не поддерживается. EPROTOTYPE Недопустимый тип протокола для сокета. ERANGE Результат математической операции слишком велик. EREMOTE Попытка обращения к удаленному объекту. EROFS Файловая система доступна только для чтения. ESHUTDOWN Невозможно выполнить передачу после отключения со- кета. ESOCKTNOSUPPORT Тип сокета не поддерживается. ESPIPE Неверное позиционирование. ESRCH Нет такого процесса. ESTALE Устаревший дескриптор файла в файловой системе NFS. ETIMEDOUT Превышено время ожидания соединения. ETOOMANYREFS Слишком много ссылок, невозможно отследить. EUSERS Слишком много пользователей. EWOULDBLOCK Операция может быть заблокирована. EXDEV Ссылка между устройствами. (продолжение) Модуль errno 433 Коды ошибок в Windows Коды ошибок, перечисленные в следующей таблице, доступны только в Windows. Код ошибки Описание WSAEACCES В разрешении отказано. WSAEADDRINUSE Адрес уже используется. WSAEADDRNOTAVAIL Невозможно назначить запрошенный адрес. WSAEAFNOSUPPORT Семейство адресов не поддерживается протоколом. WSAEALREADY Операция уже выполняется. WSAEBADF Неверный дескриптор файла. WSAECONNABORTED Соединение было разорвано. WSAECONNREFUSED Соединение было отвергнуто. WSAECONNRESET Соединение было сброшено удаленным узлом. WSAEDESTADDRREQ Не указан адрес назначения. WSAEDISCON Удаленный хост не работает. WSAEDQUOT Превышена квота на дисковое пространство. WSAEFAULT Недопустимый адрес. WSAEHOSTDOWN Хост не работает. WSAEHOSTUNREACH Нет доступных маршрутов к хосту. WSAEINPROGRESS Операция в процессе выполнения. WSAEINTR Системный вызов был прерван. WSAEINVAL Недопустимый аргумент. WSAEISCONN Сокет уже подключен. WSAELOOP Невозможно преобразовать имя. WSAEMSGSIZE Сообщение слишком длинное. WSAENAMETOOLONG Слишком длинное имя. WSAENETDOWN Сеть не работает. WSAENETRESET Отказ в соединении от сети. WSAENETUNREACH Сеть недоступна. WSAENOBUFS Недостаточно места в буфере. WSAENOPROTOOPT Недопустимый параметр протокола. WSAENOTCONN Сокет не подключен. WSAENOTEMPTY Невозможно удалить непустой каталог. WSAENOTSOCK Не является сокетом. 434 Глава 19. Службы операционной системы Код ошибки Описание WSAEOPNOTSUPP Операция не поддерживается. WSAEPFNOSUPPORT Семейство протоколов не поддерживается. WSAEPROCLIM Слишком много процессов. WSAEPROTONOSUPPORT Протокол не поддерживается. WSAEPROTOTYPE Недопустимый тип протокола для сокета. WSAEREMOTE Объект не является локальным. WSAESHUTDOWN Невозможно выполнить передачу после отключения сокета. WSAESOCKTNOSUPPORT Тип сокета не поддерживается. WSAESTALE Дескриптор файла больше недоступен. WSAETIMEDOUT Превышено время ожидания соединения. WSAETOOMANYREFS Слишком много ссылок на объект ядра. WSAEUSERS Слишком много пользователей. WSAEWOULDBLOCK Ресурс временно не доступен. WSANOTINITIALISED Интерфейс сокетов не был инициализирован. WSASYSNOTREADY Сетевая подсистема недоступна. WSAVERNOTSUPPORTED Версия Winsock.dll не поддерживается. Модуль fcntl Модуль fcntl реализует управление файлами и операциями ввода-вывода на уровне дескрипторов файлов в системе UNIX. Дескриптор файла можно получить с помощью метода fileno() объекта файла или сокета. fcntl(fd, cmd [, arg]) Выполняет команду cmd над дескриптором открытого файла fd. В аргумен- те cmd передается целочисленный код команды. В необязательном аргумен- те arg можно передать дополнительный параметр команды cmd, который может быть целым числом или строкой. Если в аргументе arg передается целое число, возвращаемым значением функции также будет целое число. Если в аргументе arg передается строка, она будет интерпретироваться как структура двоичных данных, а возвращаемое значение будет представлять собой содержимое буфера, преобразованное в объект строки. В этом слу- чае длина аргумента arg и длина возвращаемого значения не должны пре- вышать 1024 байтов, чтобы избежать возможного повреждения данных. Ниже приводится перечень доступных команд: (продолжение) Модуль fcntl 435 Команда Описание F_DUPFD Создает дубликат дескриптора файла. В аргументе arg передается минимальное число, которое может быть назначено новому де- скриптору файла. По своему действию эта команда аналогична системному вызову os.dup(). F_SETFD Устанавливает флаг close-on-exec в значение, переданное в аргу- менте arg (0 или 1). Если установить этот флаг, файл будет закрыт системным вызовом exec() F_GETFD Возвращает состояние флага close-on-exec. F_SETFL Устанавливает флаг состояния в значение, переданное в аргументе arg , которое является битовой маской, составленной из следую- щих флагов, объединяемых битовой операцией ИЛИ: O_NDELAY – Неблокирующий режим ввода-вывода (System V) O_APPEND – Режим добавления в конец файла (System V) O_SYNC – Синхронный режим записи (System V) FNDELAY – Неблокирующий режим ввода-вывода (BSD) FAPPEND – Режим добавления в конец файла (BSD) FASYNC – Передает группе процессов сигнал SIGIO, когда операции ввода-вывода станут возможными (BSD). F_GETFL Возвращает флаг состояния, установленный командой F_SETFL. F_GETOWN Возвращает идентификатор процесса или группы процессов, в на- стоящее время получающих сигналы SIGURG и SIGIO (BSD). F_SETOWN Назначает идентификатор процесса или группы процессов, кото- рые будут получать сигналы SIGIO и SIGURG (BSD). F_GETLK Возвращает структуру flock, используемую в операции блокиро- вок файлов. F_SETLK Устанавливает блокировку на файл, возвращает -1, если блокиров- ка уже была установлена в другом месте программы или другим процессом. F_SETLKW Устанавливает блокировку на файл, и если файл уже был где-то заблокирован, ожидает, пока прежняя блокировка не будет снята. Если функция fcntl() терпит неудачу, возбуждается исключение IOError. Поддержка команд F_GETLK и F_SETLK реализована на основе функции lockf(). ioctl(fd, op, arg [, mutate_flag]) Эта функция похожа на функцию fcntl() за исключением того, что коды операций, которые передаются в аргументе op, определены в библиотечном модуле termios. Дополнительный флаг mutate_flag управляет поведением этой функции, когда ей в аргументе arg передается изменяемый объект бу- фера. Дополнительную информацию об этом можно найти в электронной документации. В основном функция ioctl() используется для организации взаимодействий с драйверами устройств и низкоуровневыми компонен- 436 Глава 19. Службы операционной системы тами, поэтому особенности ее применения тесно связаны с операционной системой. Она не должна использоваться в программах, для которых пере- носимость имеет большое значение. flock(fd, op) Выполняет операцию op блокировки над дескриптором fd файла. В аргу- менте op передается битная маска, составленная из значений следующих констант, объявленных в модуле fcntl, объединенных битовой операцией ИЛИ: Флаг Описание LOCK_EX Исключительный режим работы. Все последующие попытки установить блокировку будут блокироваться, пока блокировка не будет снята. LOCK_NB Неблокирующий режим работы. Возвращает управление немед- ленно, возбуждая исключение IOError, если блокировка уже была установлена. LOCK_SH Совместный режим работы. Блокирует любые попытки уста- новить исключительную блокировку (LOCK_EX), но не запрещает установку блокировок совместного режима. LOCK_UN Снять блокировку. Снимает ранее установленную блокировку. При попытке установить неблокирующий режим возбуждается исключение IOError , если блокировка не может быть установлена немедленно. В некото- рых системах имеется возможность открыть файл и установить блокировку в одной операции, добавив специальный флаг в вызов функции os.open(). Дополнительные подробности можно найти в описании модуля os. lockf(fd, op [, len [, start [, whence]]]) Устанавливает блокировку на фрагмент файла. В аргументе op передается то же самое значение, что и при вызове функции flock(). В аргументе len пе- пе- редается количество байтов, которые должны блокироваться. В аргументе start передается начальная позиция блокируемого фрагмента относитель- передается начальная позиция блокируемого фрагмента относитель- начальная позиция блокируемого фрагмента относитель- начальная позиция блокируемого фрагмента относитель- позиция блокируемого фрагмента относитель- позиция блокируемого фрагмента относитель- блокируемого фрагмента относитель- блокируемого фрагмента относитель- фрагмента относитель- фрагмента относитель- относитель- относитель- но значения в аргументе whence. Значение 0 в аргументе whence соответству- ет началу файла, 1 – текущей позиции и 2 – концу файла. Пример import fcntl ёё # Открыть файл f = open(“foo”,”w”) ёё # Установить бит close-on-exec для объекта f файла fcntl.fcntl(f.fileno(), fcntl.F_SETFD, 1) ёё # Установить исключительную блокировку на файл fcntl.flock(f.fileno(), fcntl.LOCK_EX) ёё Модуль io 437 # Заблокировать первые 8192 байтов в файле (неблокирующий режим) try: fcntl.lockf(f.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB, 8192, 0, 0) except IOError,e: print “Невозможно установить блокировку”, e Примечания • Множество команд и их параметров, доступных функции fcntl(), зави- сит от операционной системы. Для некоторых платформ модуль fcntl объявляет более 100 констант. • В других модулях часто можно встретить операции блокировки, реа- лизованные на основе протокола менеджеров контекста. Это далеко не то же самое, что и блокировка файлов. Если программа устанавливает блокировку на файл, она обязательно должна снимать ее. • Многие функции из этого модуля могут также применяться к файло- вым дескрипторам сокетов. Модуль io Модуль io объявляет классы для различных операций ввода-вывода, а так- же встроенную функцию open(), используемую в Python 3. Этот модуль также доступен для использования в Python 2.6. Основное назначение модуля io состоит в том, чтобы обеспечить единообра- зие реализации различных форм ввода-вывода. Например, работа с тек- стом несколько отличается от работы с двоичными данными, что обуслов- лено проблемами, связанными с символами перевода строки и кодировкой символов. Для устранения этих различий модуль организован как после- довательность уровней, каждый из которых расширяет функциональные возможности предыдущего. Базовый интерфейс ввода-вывода Модуль io определяет базовый программный интерфейс операций ввода- вывода, который реализуют все объекты, похожие на файлы. Этот интер- интер- интер- фейс объявлен как базовый класс IOBase. Экземпляр f класса IOBase поддер- живает все основные операции ввода-вывода: Атрибут Описание f.closed Флаг, указывающий, был ли закрыт файл. f.close() Закрывает файл. f.fileno() Возвращает целое число дескриптора файла. f.flush() Выталкивает буферы ввода-вывода (если имеются). f.isatty() Возвращает True, если f представляет терминал. f.readable() Возвращает True, если f был открыт для чтения. 438 Глава 19. Службы операционной системы Атрибут Описание f.readline([limit]) Читает одну строку из потока. Аргумент limit опреде- ляет максимальное число байтов для чтения. f.readlines([limit]) Читает все строки из объекта f и возвращает их в виде списка. Аргумент limit, если он указан, определяет максимальное число байтов, которое может быть про- читано. Фактическое число прочитанных байтов может оказаться немного больше указанного, так как метод постарается прочитать последнюю уместившуюся стро- ку до конца, чтобы не повредить ее. f.seek(offset, [whence]) Перемещает указатель текущей позиции в новое место относительно местоположения, определяемого аргу- ментом whence. В аргументе offset передается число байтов смещения. Значение 0 в аргументе whence со- ответствует началу файла, 1 – текущей позиции и 2 – концу файла. f.seekable() Возвращает True, если объект f поддерживает возмож- ность произвольного перемещения указателя текущей позиции. f.tell() Возвращает текущую позицию указателя. f.truncate([size]) Усекает файл до размера size байтов. Если аргумент size не указан, размер файла усекается до 0. f.writable() Возвращает True, если f был открыт для записи. f.writelines(lines) Записывает последовательность строк в f. Символы завершения строк не добавляются, поэтому они уже должны присутствовать в строках. Низкоуровневый ввод-вывод На самом низком уровне системы ввода-вывода находятся операции непо- средственного ввода-вывода байтов. Основой этого уровня является класс FileIO , который обеспечивает достаточно прямолинейный интерфейс к низ- коуровневым системным вызовам, таким как read() и write(). |