справочник по Python. мм isbn 9785932861578 9 785932 861578
Скачать 4.21 Mb.
|
474 Глава 19. Службы операционной системы print “outfile :”, opt.outfile print “debug :”, opt.debug print “speed :”, opt.speed print “coord :”, opt.coord print “mode :”, opt.mode ёё # Вывести оставшиеся аргументы print “args :”, args Н иже приводится пример короткого интерактивного сеанса в системе UNIX, который демонстрирует работу предыдущего программного кода: % python foo.py -h usage: foo.py [options] ёё options: -h, --help show this help message and exit -t -o OUTFILE, --outfile=OUTFILE -d DEBUG, --debuglevel=DEBUG --speed=SPEED --coord=COORD --novice --guru ёё % python foo.py -t -o outfile.dat -d 3 --coord 3 4 --speed=ludicrous blah tracing : True outfile : outfile.dat debug : 3 speed : ludicrous coord : (3, 4) mode : novice args : [‘blah’] ёё % python foo.py --speed=insane usage: foo.py [options] ёё foo.py:error:option --speed:invalid choice:’insane’ (choose from ‘slow’, ‘fast’, ‘ludicrous’) Примечания • При определении имен параметров используйте одиночный символ де- определении имен параметров используйте одиночный символ де- определении имен параметров используйте одиночный символ де- имен параметров используйте одиночный символ де- имен параметров используйте одиночный символ де- параметров используйте одиночный символ де- параметров используйте одиночный символ де- используйте одиночный символ де- используйте одиночный символ де- одиночный символ де- одиночный символ де- символ де- символ де- де- де- фиса для определения коротких имен, таких как ‘-x’, и двойной символ дефиса для определения длинных имен, таких как ‘--exclude’. Если по- Если по- пытаться определить параметр, в котором смешиваются оба стиля, на- пример: ‘-exclude’, будет возбуждено исключение OptionError. • В стандартной библиотеке языка Python имеется также модуль getopt, который обеспечивает поддержку разбора параметров командной стро- ки в стиле библиотеки языка C с тем же именем. Однако он не имеет никаких практических преимуществ перед модулем optparse (который находится на более высоком уровне, и программный код с его использо- ванием получается компактнее). Модуль os 475 • Модуль optparse обладает массой дополнительных возможностей по на- стройке и специализированной обработке определенных видов параме- тров командной строки. Однако эти возможности не являются необхо- димыми в типичных случаях анализа параметров командной строки. Дополнительные сведения и примеры использования можно найти в электронной документации. Модуль os Модуль os предоставляет переносимый интерфейс к часто используемым службам операционной системы. Для этого он отыскивает встроенный мо- дуль, зависящий от типа операционной системы, такой как nt или posix, и экспортирует функции и данные, находящиеся в нем. Функции, пере- , пере- пере- численные ниже, доступны в Windows и UNIX, если явно не оговаривает- ниже, доступны в Windows и UNIX, если явно не оговаривает- ниже, доступны в Windows и UNIX, если явно не оговаривает- , доступны в Windows и UNIX, если явно не оговаривает- доступны в Windows и UNIX, если явно не оговаривает- в Windows и UNIX, если явно не оговаривает- в Windows и UNIX, если явно не оговаривает- Windows и UNIX, если явно не оговаривает- и UNIX, если явно не оговаривает- UNIX, если явно не оговаривает- , если явно не оговаривает- ся иное. Под системой UNIX здесь также подразумеваются системы Linux и Mac OS X. В модуле os объявлены следующие переменные общего назначения: environ Объект отображения, представляющий текущие переменные окружения. Изменения в этом отображении отражаются на текущем окружении. Если доступна функция putenv(), то изменения также отражаются на окруже- нии дочерних процессов. linesep Строка, используемая в текущей платформе для отделения строк в тек- сте. Может состоять из единственного символа, такого как ‘\n’ в системах POSIX, или из нескольких, например: ‘\r\n’ в Windows. name Имя импортируемого модуля, в зависимости от типа платформы: ‘posix’, ‘nt’ , ‘dos’, ‘mac’, ‘ce’, ‘java’, ‘os2’ или ‘riscos’. path Имя стандартного модуля, используемого для работы с путями в файловой системе, в зависимости от типа платформы. Этот модуль можно также за- грузить с помощью инструкции import os.path. Окружение процесса Ниже перечислены функции, которые используются для получения и из- менения различных параметров окружения, в котором выполняется про- цесс. Идентификаторы процесса, группы, группы процессов и сеанса явля- ются целыми числами, если не оговаривается иное. chdir(path) Назначает path текущим рабочим каталогом. chroot(path) Изменяет корневой каталог для текущего процесса (UNIX). 476 Глава 19. Службы операционной системы ctermid() Возвращает имя файла управляющего терминала для процесса (UNIX). fchdir(fd) Изменяет текущий рабочий каталог. В аргументе fd передается дескриптор файла открытого каталога (UNIX). getcwd() Возвращает строку с текущим рабочим каталогом. getcwdu() Возвращает строку Юникода с текущим рабочим каталогом. getegid() Возвращает действующий идентификатор группы (UNIX). geteuid() Возвращает действующий идентификатор пользователя (UNIX). getgid() Возвращает действительный идентификатор группы для текущего процес- са (UNIX). getgroups() Возвращает список целочисленных идентификаторов групп, которым при- надлежит владелец процесса (UNIX). getlogin() Возвращает имя пользователя, ассоциированное с действующим иденти- фикатором пользователя (UNIX). getpgid(pid) Возвращает идентификатор группы процессов для процесса с идентифика- тором pid. Если в аргументе pid передать значение 0, вернет идентификатор группы процессов для вызывающего процесса (UNIX). getpgrp() Возвращает идентификатор группы процессов для текущего процесса. Идентификаторы групп процессов обычно используются в механизмах управления заданиями. Идентификатор группы процессов – это не то же самое, что идентификатор группы процесса (UNIX). getpid() Возвращает действительный идентификатор текущего процесса (UNIX и Windows). getppid() Возвращает идентификатор родительского процесса (UNIX). getsid(pid) Возвращает идентификатор сеанса для процесса с идентификатором pid. Если в аргументе pid передать значение 0, вернет идентификатор сеанса для текущего процесса (UNIX). Модуль os 477 getuid() Возвращает действительный идентификатор пользователя для текущего процесса (UNIX). putenv(varname, value) Записывает значение value в переменную окружения varname. Изменения будут доступны дочерним процессам, запущенным с помощью функций os.system() , popen(), fork() и execv(). Операция присваивания значений эле- ментам словаря os.environ автоматически вызывает функцию putenv(). Од- нако вызов putenv() не изменяет значения в os.environ (UNIX и Windows). setegid(egid) Устанавливает действующий идентификатор группы (UNIX). seteuid(euid) Устанавливает действующий идентификатор пользователя (UNIX). setgid(gid) Устанавливает идентификатор группы для текущего процесса (UNIX). setgroups(groups) Устанавливает групповые права доступа для текущего процесса. В аргу- менте groups передается последовательность целочисленных идентифика- торов групп. Может вызываться только пользователем root (UNIX). setpgrp() Создает новую группу процессов с помощью системного вызова setpgrp() или setpgrp(0, 0), в зависимости от того, какая версия реализована (если имеется). Возвращает идентификатор новой группы процессов (UNIX). setpgid(pid, pgrp) Присоединяет процесс с идентификатором pid к группе процессов pgrp. Если значение pid совпадает со значением pgrp, процесс становится лиде- ром новой группы процессов. Если значение pid не совпадает со значением pgrp , процесс просто присоединяется к существующей группе процессов. Если в аргументе pid передать значение 0, будет использоваться идентифи- катор вызывающего процесса. Если в аргументе pgrp передать значение 0, процесс с идентификатором pid станет лидером группы процессов (UNIX). setreuid(ruid,euid) Устанавливает действительный и действующий идентификатор пользова- теля для вызывающего процесса (UNIX). setregid(rgid,egid) Устанавливает действительный и действующий идентификатор группы для вызывающего процесса (UNIX). setsid() Создает новый сеанс и возвращает его идентификатор. Сеансы обычно ас- социируются с устройствами терминалов и используются для управления процессами, запущенными в них (UNIX). 478 Глава 19. Службы операционной системы setuid(uid) У станавливает действительный идентификатор пользователя для теку- щего процесса. Эта функция требует наличия определенных привилегий и часто может использоваться только в процессах, запущенных пользова- телем root (UNIX). strerror(code) Возвращает текст сообщения об ошибке, соответствующий целочисленно- му коду code (UNIX и Windows). Символические имена кодов ошибок опре- UNIX и Windows). Символические имена кодов ошибок опре- и Windows). Символические имена кодов ошибок опре- Windows). Символические имена кодов ошибок опре- ). Символические имена кодов ошибок опре- делены в модуле errno. umask(mask) Устанавливает маску umask для процесса и возвращает предыдущее значе- ние umask. Маска umask используется для сброса битов разрешений у фай- лов, создаваемых процессом (UNIX и Windows). uname() Возвращает кортеж строк (sysname, nodename, release, version, machine), идентифицирующих тип операционной системы (UNIX). unsetenv(name) Сбрасывает значение переменной окружения name. Создание файлов и дескрипторы файлов Ниже перечислены функции, составляющие низкоуровневый интерфейс манипулирования файлами и каналами. Эти функции оперируют файла- ми, используя целочисленные дескрипторы fd. Дескриптор файла можно получить вызовом метода fileno() объекта файла. close(fd) Закрывает дескриптор файла fd, полученный ранее функцией open() или pipe() closerange(low, high) Закрывает все дескрипторы файлов fd в диапазоне low <= fd < high. Возни- кающие ошибки игнорируются. dup(fd) Создает копию дескриптора fd. Возвращает новый дескриптор файла, ко- Возвращает новый дескриптор файла, ко- торый получает наименьшее возможное для процесса значение из числа дескрипторов. Старый и новый дескрипторы являются полностью эквива- лентными друг другу. Кроме того, они совместно используют такие атри- буты файла, как указатель текущей позиции и блокировки (UNIX и Win- UNIX и Win- и Win- Win- dows). dup2(oldfd, newfd) Копирует дескриптор oldfd в newfd. Если дескриптор newfd соответствует уже открытому файлу, он будет закрыт перед копированием (UNIX и Win- UNIX и Win- и Win- Win- dows). Модуль os 479 fchmod(fd, mode) У станавливает новый режим mode файла, соответствующего дескриптору fd . Дополнительная информация о режимах приводится в описании функ- ции os.open() (UNIX). fchown(fd, uid, gid) Устанавливает новый идентификатор пользователя uid и группы gid вла- дельца файла, соответствующего дескриптору fd. Чтобы сохранить один из идентификаторов неизменным, в соответствующем аргументе можно пере- дать значение -1 (UNIX). fdatasync(fd) Принудительно выталкивает на диск все кэшированные данные, записан- ные в файловый дескриптор fd (UNIX). fdopen(fd [, mode [, bufsize]]) Создает открытый объект файла, подключенный к дескриптору fd. Аргу- менты mode и bufsize имеют тот же смысл, что и во встроенной функции open() . В аргументе mode должна передаваться строка, такая как ‘r’, ‘w’ или ‘a’ . В Python 3 этой функции могут передаваться любые дополнительные аргументы, которые принимает встроенная функция open(), такие как на- звание кодировки или строка, определяющая символ окончания строк. Однако когда используется Python 2 и переносимость программы имеет большое значение, в вызовах этой функции следует использовать только аргументы mode и bufsize, описанные здесь. fpathconf(fd, name) Возвращает значения системных параметров настройки, имеющих отно- шение к файлам и каталогам, ассоциированных с открытым дескриптором файла fd. В аргументе name передается строка с именем требуемого параме- тра. Возвращаемые значения обычно извлекаются из определений параме- тров в системных заголовочных файлах, таких как Стандарт POSIX определяет следующие константы, которые могут переда- POSIX определяет следующие константы, которые могут переда- определяет следующие константы, которые могут переда- ваться в аргументе name: Константа Описание “PC_ASYNC_IO” Указывает, могут ли выполняться асинхронные опера- ции ввода-вывода над дескриптором fd. “PC_CHOWN_RESTRICTED” Указывает, может ли использоваться функция chown(). Если дескриптор fd ссылается на каталог, возвращаемый результат в равной степени относится ко всем файлам в этом каталоге. “PC_FILESIZEBITS” Максимально возможный размер файла. “PC_LINK_MAX” Максимальное значение счетчика ссылок для одного файла. “PC_MAX_CANON” Максимальная длина форматированной строки ввода. Дескриптор fd должен ссылаться на терминал. 480 Глава 19. Службы операционной системы Константа Описание “PC_MAX_INPUT” М аксимальная длина строки ввода. Дескриптор fd дол- жен ссылаться на терминал. “PC_NAME_MAX” Максимальная длина имени файла или каталога. “PC_NO_TRUNC” Указывает, должна ли приводить к ошибке ENAMETOOLONG попытка создать файл с именем, длина которого превы- шает значение PC_NAME_MAX. “PC_PATH_MAX” Максимальная длина относительного пути к файлу, ког- да каталог fd является текущим рабочим каталогом. “PC_PIPE_BUF” Размер буфера канала, когда дескриптор fd ссылается на канал или на очередь FIFO. “PC_PRIO_IO” Указывает, поддерживаются ли приоритетные операции ввода-вывода над дескриптором fd. “PC_SYNC_IO” Указывает, могут ли выполняться синхронные операции ввода-вывода над дескриптором fd. “PC_VDISABLE” Указывает, может ли быть запрещено действие специ- альных символов. Дескриптор fd должен ссылаться на терминал. Перечисленные имена доступны не во всех платформах, а некоторые си- стемы могут объявлять дополнительные параметры настройки. Пере- чень имен, известных в операционной системе, можно найти в словаре os.pathconf_names . Если параметр настройки известен, но его имя не вклю- чено в os.pathconf_names, в аргументе name можно передать его числовой идентификатор. Даже если имя параметра распознается интерпретатором, эта функция все равно может возбуждать исключение OSError, если сама операционная система не распознает параметр или этот параметр не свя- зан с файлом fd. Эта функция доступна только в некоторых версиях UNIX. fstat(fd) Возвращает состояние дескриптора fd. Возвращает те же значения, что и функция os.stat() (UNIX и Windows). fstatvfs(fd) Возвращает информацию о файловой системе, где расположен файл, ассо- циированный с дескриптором fd. Возвращает те же самые значения, что и функция os.statvfs() (UNIX). fsync(fd) Принудительно записывает на диск все незаписанные данные, имеющиеся в fd. Обратите внимание, что если вы пользуетесь объектом, поддерживаю- щим буферизованные операции ввода-вывода (например, объектом file), то перед вызовом fsync() должна вызываться функция fdatasync(). Доступна в UNIX и Windows. (продолжение) Модуль os 481 ftruncate(fd, length) У секает размер файла, соответствующего дескриптору fd, до значения length (UNIX). isatty(fd) Возвращает True, если дескриптор fd ссылается на TTY-подобное устрой- TTY-подобное устрой- -подобное устрой- ство, такое как терминал (UNIX). lseek(fd, pos, how) Устанавливает указатель текущей позиции для дескриптора fd в место- положение pos. Значение how интерпретируется следующим образом: SEEK_SET – позиционирование выполняется относительно начала файла, SEEK_CUR – позиционирование выполняется относительно текущей позиции и SEEK_END – позиционирование выполняется относительно конца файла. В старых программах на языке Python часто можно встретить использо- Python часто можно встретить использо- часто можно встретить использо- вание вместо этих констант их числовых значений: 0, 1 и 2 соответственно. open(file [, flags [, mode]]) Открывает файл file. В аргументе flags передается битная маска, состав- ленная из значений следующих констант, объединенных битовой операци- ей ИЛИ: Значение |