справочник по Python. мм isbn 9785932861578 9 785932 861578
Скачать 4.21 Mb.
|
Описание “SC_ARG_MAX” Максимальная длина аргументов функции exec(). “SC_CHILD_MAX” Максимальное количество процессов на один идентифи- катор пользователя. “SC_CLK_TCK” Количество тактов системных часов в одной секунде. “SC_NGROUPS_MAX” Максимальное количество идентификаторов дополни- тельных групп на процесс. “SC_STREAM_MAX” Максимальное количество одновременно открытых пото- ков ввода-вывода на процесс. “SC_TZNAME_MAX” Максимальное количество байтов в названии часового пояса. “SC_OPEN_MAX” Максимальное количество одновременно открытых фай- лов на процесс. 496 Глава 19. Службы операционной системы Параметр Описание “SC_JOB_CONTROL” Признак поддержки системой механизма управления заданиями. “SC_SAVED_IDS” Признак поддержки системой сохраненных идентифика- торов пользователя и группы для каждого процесса. urandom(n) Возвращает строку n байтов со случайными значениями, сгенерированны- ми системой (например, с помощью устройства /dev/urandom в UNIX). Воз- UNIX). Воз- ). Воз- вращаемые байты пригодны для использования в криптографических це- лях. Исключения Для уведомления об ошибках в модуле os объявляется единственное ис- ключение. error Возбуждается, когда функция возвращает признак системной ошибки. Аналогично встроенному исключению OSError. Несет в себе два значения: errno и strerr. Первое значение представляет целочисленный код ошибки, из числа тех, что приводятся в описании модуля errno. Второе – строка с тек- – строка с тек- строка с тек- с тек- с тек- тек- тек- стом сообщения об ошибке. Исключения, имеющие отношение к ошибкам, возникшим при выполнении операций с файловой системой, имеют третий дополнительный атрибут filename с именем файла, переданным функции. Модуль os.path Модуль os.path позволяет обеспечить переносимость операций со строками путей в файловой системе. Он импортируется модулем os. abspath(path) Возвращает абсолютную версию пути path, с учетом текущего рабочего ка- талога. Например, вызов abspath(‘../Python/foo’) мог бы вернуть ‘/home/bea- home/bea- /bea- bea- zley/Python/foo’ basename(path) Возвращает базовое имя в пути path. Например, вызов basename(‘/usr/local/ python’) вернет ‘python’. commonprefix(list) Возвращает наибольшую строку, которая является префиксом для всех строк в списке list. Если список list пуст, возвращает пустую строку. dirname(path) Возвращает имя каталога для базового имени в пути path. Например, вызов dirname(‘/usr/local/python’) вернет ‘/usr/local’. (продолжение) Модуль os.path 497 exists(path) Возвращает True, если путь path существует в файловой системе. Возвраща- ет False, если указанный путь path не существует. expanduser(path) Замещает в пути ссылки вида ‘user’ полными путями к домашним ката- логам пользователей. Если такая подстановка невозможна или строка path не начинается с символа ‘’, возвращает значение аргумента path без изме- нений. expandvars(path) Замещает в пути path ссылки на переменные вида ‘$name’ или ‘${name}’ их значениями. Если имя переменной указано неправильно или эта перемен- ная не существует, возвращает значение аргумента path без изменений. getatime(path) Возвращает время последнего обращения в виде числа секунд, прошедших с начала эпохи (смотрите описание модуля time). Если функция os.stat_ float_times() возвращает True, возвращаемое значение может быть числом с плавающей точкой. getctime(path) В UNIX возвращает время последнего изменения, а в Windows – время соз- UNIX возвращает время последнего изменения, а в Windows – время соз- возвращает время последнего изменения, а в Windows – время соз- Windows – время соз- – время соз- дания. Время возвращается в виде количества секунд, прошедших с нача- ла эпохи (смотрите описание модуля time). В некоторых случаях возвраща- емое значение может быть числом с плавающей точкой (смотрите описание функции getatime()). getmtime(path) Возвращает время последнего изменения в виде числа секунд, прошедших с начала эпохи (смотрите описание модуля time). В некоторых случаях воз- вращаемое значение может быть числом с плавающей точкой (смотрите описание функции getatime()). getsize(path) Возвращает размер файла в байтах. isabs(path) Возвращает True, если путь path является абсолютным путем (начинается с символа слэша). isfile(path) Возвращает True, если аргумент path содержит путь к обычному файлу. Эта функция разыменовывает символические ссылки, поэтому для одного и того же значения path обе функции, islink() и isfile(), могут возвращать True isdir(path) Возвращает True, если аргумент path содержит путь к каталогу. Символиче- ские ссылки разыменовываются. 498 Глава 19. Службы операционной системы islink(path) Возвращает True, если аргумент path содержит путь к символической ссыл- ке. Если символические ссылки не поддерживаются системой, возвращает False ismount(path) Возвращает True, если аргумент path содержит путь к точке монтирования. join(path1 [, path2 [, ...]]) Составляет путь из одного или более аргументов. Например, вызов join(‘home’, ‘beazley’, ‘Python’) вернет ‘home/beazley/Python’. lexists(path) Возвращает True, если путь path существует. Для всех символических ссы- лок возвращает True, даже если символические ссылки указывают на не- существующий файл или каталог. normcase(path) Нормализует регистр символов в пути path. Если файловая система не- чувствительна к регистру символов, эта функция приведет все символы к нижнему регистру. Кроме того, в Windows заменит символы слэша сим- Windows заменит символы слэша сим- заменит символы слэша сим- волами обратного слэша. normpath(path) Нормализует путь path. Устраняет излишние разделители и ссылки на ро- Устраняет излишние разделители и ссылки на ро- дительские каталоги. Например, все следующие пути: ‘A//B’, ‘A/./B’ и ‘A/ foo/../B’ будут преобразованы в путь ‘A/B’. В Windows все символы слэша будут замещены символами обратного слэша. realpath(path) Возвращает действительный путь для пути path, устраняя все символиче- ские ссылки, если таковые имеются (UNIX). relpath(path [, start]) Для пути path вернет относительный путь от текущего рабочего каталога. Аргумент start может использоваться, чтобы указать другой начальный каталог. samefile(path1, path2) Возвращает True, если path1 и path2 ссылаются на один и тот же файл или каталог (UNIX). sameopenfile(fp1, fp2) Возвращает True, если открытые объекты файлов fp1 и fp2 ссылаются на один и тот же файл (UNIX). samestat(stat1, stat2) Возвращает True, если кортежи stat1 и stat2, полученные в результате вызо- ва функции fstat(), lstat() или stat(), относятся к одному и тому же файлу (UNIX). Модуль signal 499 split(path) Разбивает путь path на две части (head, tail), где поле tail содержит по- следний элемент пути, а поле head – все, что предшествует последнему эле- менту. Например, путь ‘/home/user/foo’ будет разбит на части (‘/home/ user’, ‘foo’) . Тот же кортеж можно получить с помощью конструкции (dirname(), basename()) splitdrive(path) Разбивает путь path на две части (drive, filename), где поле drive содержит определение устройства или пустую строку. В системах, где отсутствует по- устройства или пустую строку. В системах, где отсутствует по- устройства или пустую строку. В системах, где отсутствует по- или пустую строку. В системах, где отсутствует по- или пустую строку. В системах, где отсутствует по- пустую строку. В системах, где отсутствует по- пустую строку. В системах, где отсутствует по- строку. В системах, где отсутствует по- строку. В системах, где отсутствует по- . В системах, где отсутствует по- В системах, где отсутствует по- нятие «буква устройства», в поле drive всегда возвращается пустая строка. splitext(path) Разбивает путь path на базовое имя файла и расширение. Например, вызов splitext(‘foo.txt’) вернет (‘foo’, ‘.txt’). splitunc(path) Разбивает путь path на две части (unc,rest), где поле unc содержит строку с точкой монтирования в формате UNC (Universal Naming Convention – универсальное соглашение об именовании), а поле rest – остаток пути (Windows). supports_unicode_filenames Переменная, имеет значение True, если файловая система поддерживает символы Юникода в именах файлов. Примечание В системе Windows требуется проявлять особую осторожность при работе с име- Windows требуется проявлять особую осторожность при работе с име- требуется проявлять особую осторожность при работе с име- нами файлов, включающими букву устройства (например, ‘C:spam.txt’). В боль- шинстве случаев предполагается, что файл находится в текущем рабочем ката- логе. Например, если текущим рабочим каталогом является ‘C:\Foo\’, то строка с именем файла ‘C:spam.txt’ будет интерпретироваться, как путь ‘C:\Foo\C:spam. txt’ , а не как ‘C:\spam.txt’. См. также Описание модулей fnmatch (стр. 398), glob (стр. 399), os (стр. 475). Модуль signal Модуль signal используется для создания обработчиков сигналов в про- граммах на языке Python. Сигналы, как правило, соответствуют асин- хронным событиям и посылаются программе по истечении установленно- го интервала времени, при получении входных данных или в результате каких-либо действий пользователя. Интерфейс модуля signal имитирует интерфейс, реализованный в UNIX, несмотря на то, что отдельные части модуля могут поддерживать и другие платформы. 500 Глава 19. Службы операционной системы alarm(time) Е сли аргумент time не равен нулю, запрашивает посылку сигнала SIGALRM текущему процессу через time секунд. Ранее запланированная посылка этого сигнала при этом отменяется. Если в аргументе time передать ноль, ранее запланированная посылка этого сигнала отменяется. Возвращает время в секундах, оставшееся до посылки ранее запланированного сигна- ла, или ноль, если посылка сигнала не была запланирована (UNIX). getsignal(signalnum) Возвращает обработчик сигнала signalnum. Возвращаемый объект является объектом Python, поддерживающим возможность вызова. Функция может также возвращать значение SIG_IGN, если указанный сигнал игнорирует- ся, SIG_DFL, если сигнал обрабатывается обработчиком по умолчанию, или None , если обработчик сигнала не был установлен интерпретатором Python. getitimer(which) Возвращает текущее значение внутреннего таймера с идентификатором which pause() Приостанавливает выполнение процесса до получения следующего сигна- ла (UNIX). set_wakeup_fd(fd) Определяет дескриптор файла, в который будет записан байт ‘\0’ при по- лучении сигнала. Это может использоваться для обработки сигналов в программах, которые циклически опрашивают дескрипторы файлов с помощью функций, например тех, что объявлены в модуле select. Файл, представленный дескриптором fd, должен быть открыт в неблокирующем режиме. setitimer(which, seconds [, interval]) Устанавливает внутренний таймер, посылающий сигнал через seconds се- кунд и затем повторяющий его через каждые interval секунд. В обоих этих аргументах передаются числа с плавающей точкой. В аргументе which мож- но передать одно из следующих значений: ITIMER_REAL, ITIMER_VIRTUAL или ITIMER_PROF . Этот аргумент определяет, какой сигнал будет посылаться про- цессу по истечении таймера. Значение ITIMER_REAL соответствует сигналу SIGALRM , значение ITIMER_VIRTUAL – сигналу SIGVTALRM и значение ITIMER_PROF – сигналу SIGPROF. Значение 0 в аргументе seconds сбрасывает таймер. Возвра- Возвра- щает кортеж (seconds, interval) с предыдущими параметрами таймера. siginterrupt(signalnum, flag) Определяет поведение системных вызовов при получении процессом сиг- нала signalnum. Если в аргументе flag передать False, при получении сиг- нала signalnum системный вызов будет автоматически перезапущен. Если передать True, работа системного вызова будет прервана. Как правило, пре- рванные системные вызовы возбуждают исключение OSError или IOError с кодом ошибки errno.EINTR или errno.EAGAIN. Модуль signal 501 signal(signalnum, handler) У станавливает функцию handler в качестве обработчика сигнала signalnum. В аргументе handler должен передаваться объект Python, поддерживаю- Python, поддерживаю- , поддерживаю- щий возможность вызова и принимающий два аргумента: номер сигнала и объект кадра стека. Чтобы игнорировать сигнал или установить обработ- чик по умолчанию, можно передать значение SIG_IGN или SIG_DFL соответ- ственно. Возвращает предыдущий обработчик сигнала, SIG_IGN или SIG_DFL. В многопоточных приложениях эта функция должна вызываться только из главного потока управления. В противном случае будет возбуждено ис- ключение ValueError. Отдельные сигналы могут идентифицироваться с помощью символических констант вида SIG*. Эти имена соответствуют целочисленным значениям, зависящим от типа системы. Ниже приводятся наиболее часто используе- мые константы: Имя сигнала Описание SIGABRT Аварийное прерывание процесса SIGALRM Генерируется таймером SIGBUS Аппаратная ошибка, обычно связанная с памятью SIGCHLD Изменилось состояние дочернего процесса SIGCLD Изменилось состояние дочернего процесса SIGCONT Продолжить работу приостановленного процесса SIGFPE Ошибка при выполнении операции над числами с плавающей точкой SIGHUP Разрыв связи с управляющим терминалом SIGILL Недопустимая инструкция SIGINT От терминала получен символ прерывания работы процесса SIGIO Событие асинхронного ввода-вывода SIGIOT Аппаратная ошибка SIGKILL Завершить работу процесса SIGPIPE Выполнена запись в канал, когда с другого конца канала нет читающего процесса SIGPOLL Произошло событие в опрашиваемом устройстве SIGPROF Генерируется профилирующим таймером SIGPWR Сбой в питании SIGQUIT От терминала получен символ завершения работы процесса SIGSEGV Обращение к недопустимому адресу в памяти SIGSTOP Останов процесса 502 Глава 19. Службы операционной системы Имя сигнала Описание SIGTERM Завершить работу процесса SIGTRAP Аппаратная ошибка SIGTSTP От терминала получен символ приостановки процесса SIGTTIN Управляющий сигнал от терминала SIGTTOU Управляющий сигнал от терминала SIGURG Произошло срочное событие SIGUSR1 Определяется пользователем SIGUSR2 Определяется пользователем SIGVTALRM Генерируется виртуальным таймером SIGWINCH Изменился размера окна SIGXCPU Достигнут предел на использование процессора SIGXFSZ Превышен предельный размер файла Кроме того, в модуле объявлены следующие переменные: Переменная Описание SIG_DFL Обработчик сигнала, который вызывает обработчик по умол- чанию SIG_IGN Обработчик сигнала, который игнорирует сигнал NSIG Имеет значение на единицу больше самого большого номера сигнала Пример Следующий пример демонстрирует, как ограничить время ожидания уста- новления соединения (модуль socket уже поддерживает возможность огра- ничения по времени, поэтому данный пример предназначен лишь для того, чтобы продемонстрировать основные приемы работы с модулем signal). import signal, socket def handler(signum, frame): print ‘Timeout!’ raise IOError, ‘Host not responding.’ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) signal.signal(signal.SIGALRM, handler) signal.alarm(5) # Послать сигнал через 5 секунд sock.connect(‘www.python.org’, 80) # Установить соединение signal.alarm(0) # Сбросить таймер (продолжение) Модуль subprocess 503 Примечания • Обработчики сигналов продолжают действовать, пока явно не будут сброшены. Исключение составляет сигнал SIGCHLD (поведение которого определяется реализацией). • Не существует способа временно заблокировать сигналы. • Обработчики сигналов вызываются асинхронно, но это может произой- ти только между атомарными инструкциями интерпретатора Python. Доставка сигнала может быть отложена на время, пока производятся длительные вычисления, реализованные на языке C (например, в моду- C (например, в моду- (например, в моду- ле расширения). • Если сигнал поступает во время выполнения операции ввода-вывода, она может быть прервана исключением. В этом случае в атрибут errno исключения записывается код ошибки errno.EINTR, чтобы показать, что работа системного вызова была прервана сигналом. • Некоторые сигналы, такие как SIGSEGV, не могут обрабатываться из про- граммного кода на языке Python. • Интерпретатор Python устанавливает некоторое количество обработчи- Python устанавливает некоторое количество обработчи- устанавливает некоторое количество обработчи- ков сигналов по умолчанию. Сигнал SIGPIPE игнорируется, сигнал SIGINT преобразуется в исключение KeyboardInterrupt, а при получении сигнала SIGTERM производятся заключительные операции по завершению про- цесса и вызывается функция sys.exitfunc. • Особую осторожность следует проявлять при использовании сигналов в многопоточных программах. В настоящее время установка новых об- работчиков и прием сигналов может производиться только из главного потока. • Возможности обработки сигналов в Windows достаточно ограничены. Количество сигналов, поддерживаемых в этой платформе, весьма неве- лико. Модуль subprocess Модуль subprocess содержит функции и классы, обеспечивающие универ- сальный интерфейс для выполнения таких задач, как создание новых про- цессов, управление потоками ввода и вывода и обработка кодов возврата. Модуль объединяет в себе многие функциональные возможности, присут- ствующие в других модулях, таких как os, popen2 и commands. Popen(args, **parms) Выполняет команду, запуская новый дочерний процесс, и возвращает объ- ект класса Popen, представляющий новый процесс. Команда определяется в аргументе args либо как строка, такая как ‘ls -l’, либо как список строк, такой как [‘ls’, ‘-l’]. В аргументе parms передается коллекция именован- ных аргументов, которые могут использоваться для управления различ- ными характеристиками дочернего процесса. Ниже приводится перечень допустимых именованных аргументов: 504 Глава 19. Службы операционной системы Именованный аргумент Описание bufsize Определяет режим буферизации, где значение 0 соответствует отсутствию буферизации, 1 – выполняется построчная буфери- зация, при отрицательном значении используются системные на- стройки, а любое другое положительное значение определяет при- мерный размер буфера. По умолчанию используется значение 0. close_fds Если имеет значение True, перед запуском дочернего процесса все дескрипторы файлов, кроме 0, 1 и 2, закрываются. По умолча- нию используется значение False. creation_flags Определяет флаги создания процесса в Windows. В настоящее время доступен только один флаг – CREATE_NEW_CONSOLE. По умол- умол- умол- чанию используется значение 0. cwd Каталог, в котором будет запущена команда. Перед запуском те- кущим рабочим каталогом дочернего процесса назначается cwd. По умолчанию используется значение None, которое соответству- ет использованию текущего рабочего каталога родительского процесса. env Словарь с переменными окружения для нового процесса. По умолчанию используется значение None, которое соответствует использованию окружения родительского процесса. executable Определяет имя выполняемой программы. Используется доста- точно редко, так как имя программы уже включено в args. Если в этом параметре определить имя командной оболочки, команда будет запущена в этой командной оболочке. По умолчанию ис- пользуется значение None . preexec_fn Определяет функцию в дочернем процессе, которая должна быть вызвана перед запуском команды. Функция не должна иметь входных аргументов. shell Если имеет значение True, команда выполняется в командной оболочке UNIX, с помощью функции os.system(). По умолчанию используется командная оболочка /bin/sh, но можно указать другую оболочку в параметре executable. По умолчанию исполь- зуется значение None. startupinfo Определяет флаги запуска процесса в Windows. По умолчанию используется значение None. В число допустимых значений вхо- дят STARTF_USESHOWWINDOW и STARTF_USESTDHANDLERS. stderr Объект файла, который будет использоваться дочерним процес- сом как поток stderr. В этом параметре допускается передавать объект файла, созданный с помощью функции open(), целочис- ленный дескриптор файла или специальное значение PIPE, кото- рое указывает на необходимость создания нового неименованно- го канала. По умолчанию используется значение None. stdin Объект файла, который будет использоваться дочерним процес- сом как поток stdin. В этом параметре допускается передавать те же значения, что и в параметре stderr. По умолчанию использу- ется значение None. Модуль subprocess 505 Именованный аргумент Описание stdout Объект файла, который будет использоваться дочерним процес- сом как поток stdout. В этом параметре допускается передавать те же значения, что и в параметре stderr. По умолчанию исполь- зуется значение None universal_new- lines Если имеет значение True, файлы, представляющие потоки stdin, stdout и stderr, открываются в текстовом режиме с поддержкой универсального символа перевода строки. Подробнее об этом рас- сказывается в описании функции open(). call(args, **parms) Эта функция выполняет те же действия, что и функция Popen(), за исклю- чением того, что она просто выполняет команду и возвращает код заверше- ния (то есть она не возвращает объект класса Popen ). Эту функцию удобно использовать, когда требуется всего лишь выполнить команду и нет необ- ходимости получать от нее вывод или управлять ею каким-либо способом. Аргументы имеют тот же смысл, что и в функции Popen(). check_call(args, **parms) То же, что и call(), за исключением того, что в случае получения ненулево- го кода завершения возбуждает исключение CalledProcessError. Код завер- завер- завер- шения сохраняется в атрибуте returncode исключения. Объект p класса Popen, возвращаемый функцией Popen(), обладает различ- ными методами и атрибутами, которые могут использоваться для взаимо- действия с дочерним процессом. p.communicate([input]) Передает данные input на стандартный ввод дочернего процесса. После от- правки данных этот метод ожидает завершения дочернего процесса, про- должая принимать данные, которые выводятся дочерним процессом в его потоки стандартного вывода и стандартного вывода сообщений об ошиб- ках. Возвращает кортеж (stdout, stderr), где поля stdout и stderr являются строками. Если не требуется передавать данные дочернему процессу, аргу- мент input можно установить в значение None (по умолчанию). p.kill() Принудительно завершает дочерний процесс, для чего в UNIX посылается сигнал SIGKILL, а в Windows вызывается метод p.terminate(). p.poll() Проверяет, завершился ли дочерний процесс. Если процесс завершился, возвращает код завершения. В противном случае возвращает None. p.send_signal(signal) Посылает сигнал дочернему процессу. В аргументе signal передается номер сигнала, как определено в модуле signal. В Windows поддерживается един- Windows поддерживается един- поддерживается един- ственный сигнал SIGTERM. 506 Глава 19. Службы операционной системы p.terminate() Принудительно завершает дочерний процесс, посылая ему сигнал SIGTERM в UNIX или вызывая Win32 API функцию TerminateProcess в Windows. p.wait() Ожидает завершения дочернего процесса и возвращает код завершения. p.pid Целочисленный идентификатор дочернего процесса. p.returncode Код завершения дочернего процесса. Значение None свидетельствует о том, что дочерний процесс еще не завершился. Отрицательное значение указы- вает на то, что дочерний процесс завершился в результате получения сиг- нала (UNIX). p.stdin , p.stdout, p.stderr Эти три атрибута представляют открытые объекты файлов, соответствую- щие потокам ввода-вывода, открытым как неименованные каналы (напри- мер, установкой параметра stdout функции Popen() в значение PIPE). Эти объекты файлов обеспечивают возможность подключения к другим дочер- ним процессам. Эти атрибуты получают значение None, когда каналы не ис- пользуются. Примеры # Выполнить простую системную команду с помощью os.system() ret = subprocess.call(“ls -l”, shell=True) ёё # Выполнить простую команду, игнорируя все, что она выводит ret = subprocess.call(“rm –f *.java”,shell=True, stdout=open(“/dev/null”)) ёё # Выполнить системную команду, но сохранить ее вывод p = subprocess.Popen(“ls -l”, shell=True, stdout=subprocess.PIPE) out = p.stdout.read() ёё # Выполнить команду, передать ей входные данные и сохранить вывод p = subprocess.Popen(“wc”, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = p.communicate(s) # Передать строку s дочернему процессу ёё # Создать два дочерних процесса и связать их каналом p1 = subprocess.Popen(“ls -l”, shell=True, stdout=subprocess.PIPE) p2 = subprocess.Popen(“wc”,shell=True, stdin=p1.stdout, stdout=subprocess.PIPE) out = p2.stdout.read() Примечания Как правило, команды лучше передавать в виде списка строк, а не в виде единственной строки (например, [‘wc’,’filename’] вместо ‘wc filename’). Модуль time 507 М ногие системы позволяют использовать символы пробела и другие не- алфавитные символы в именах файлов (например, папка «Documents and Settings» в Windows). В подобных ситуациях, если команда определяется в виде списка строк, никаких проблем возникать не будет. Чтобы сформи- ровать команду, где используются подобные имена файлов, вам потребу- ется выполнить дополнительные действия, чтобы экранировать специаль- ные символы и пробелы. В Windows каналы открываются в двоичном режиме. То есть текст, про- Windows каналы открываются в двоичном режиме. То есть текст, про- каналы открываются в двоичном режиме. То есть текст, про- читанный из потока стандартного вывода дочернего процесса, будет со- держать дополнительный символ возврата каретки на концах строк (‘\r\n’ вместо ‘\n’). Если это может вызывать проблемы, функции Popen() следует передавать значение True в параметре universal_newlines. Модуль subprocess не может использоваться для управления дочерними процессами, которые предполагают возможность прямого доступа к тер- миналу или к устройству TTY. Наиболее типичными примерами таких программ являются любые команды, ожидающие ввода пароля пользова- теля (такие как ssh, ftp, svn и так далее). Для управления такими програм- мами рекомендуется искать сторонние модули, основанные на популярной утилите «Expect», имеющейся в системе UNIX. Модуль time Модуль time предоставляет различные функции для работы со временем. В языке Python время измеряется количеством секунд, прошедших с нача- Python время измеряется количеством секунд, прошедших с нача- время измеряется количеством секунд, прошедших с нача- ла эпохи. Начало эпохи соответствует началу исчисления времени (момен- ту, когда время было равно 0 секунд). В UNIX началу эпохи соответствует дата 1 января 1970 года, а в других системах может быть определено вызо- вом функции time.gmtime(0). Ниже перечислены переменные, объявленные в модуле: accept2dyear Логическое значение, указывающее – допускается ли использовать дву- значное представление года. По умолчанию эта переменная имеет значе- ние True, но она получит значение False, если в переменную окружения $PYTHONY2K записать непустую строку. Кроме того, значение переменной ac- cept2dyear может изменяться вручную. altzone Часовой пояс, используемый после перехода на летнее время (DST), если применимо. daylight Имеет ненулевое значение, если определен часовой пояс, используемый по- сле перехода на летнее время. timezone Локальный (не летний) часовой пояс. 508 Глава 19. Службы операционной системы tzname Кортеж с названиями локального часового пояса и зимнего/летнего (если определен) часового пояса. В модуле time также определены следующие функции: asctime([tuple]) Преобразует кортеж, представляющий время, возвращаемое функцией gm- time() или localtime(), в строку вида ‘Mon Jul 12 14:45:23 1999’. При вызове без аргумента возвращает представление текущего времени. clock() Возвращает текущее процессорное время в секундах в виде числа с пла- вающей точкой. ctime([secs]) Преобразует время secs, выраженное в секундах от начала эпохи, в строку, представляющую локальное время. Вызов ctime(secs) эквивалентен вызо- эквивалентен вызо- вызо- вызо- ву asctime(localtime(secs)). При вызове без аргумента или со значением None в аргументе возвращает представление текущего времени. gmtime([secs]) Принимает время secs, выраженное в секундах от начала эпохи по Грин- вичскому времени (Coordinated Universal Time, UTC), и возвращает объект типа struct_time, обладающий следующими атрибутами: Атрибут Значение tm_year Четырехзначный год, например 1998 tm_mon 1-12 tm_mday 1-31 tm_hour 0-23 tm_min 0-59 tm_sec 0-61 tm_wday 0-6 (0 = понедельник) tm_yday 1-366 tm_isdst -1 , 0, 1 Когда действует летнее время (DST), атрибут tm_isdst принимает значение 1 , 0 – если действует зимнее время, и -1 – если эта информация недоступна. При вызове без аргумента или когда в аргументе secs передается значение None , используется текущее время. Для обратной совместимости возвраща- емый объект struct_time может вести себя как кортеж с девятью значения- ми, описанными выше, следующими в том же порядке. localtime([secs]) Возвращает объект типа struct_time, как и функция gmtime(), информация в котором соответствует локальному часовому поясу. При вызове без аргу- Модуль time 509 мента или когда в аргументе secs передается значение None, используется текущее время. mktime(tuple) Принимает объект типа struct_time или кортеж, представляющий время для локального часового пояса (в том же формате, в каком оно возвраща- ется функцией localtime()), и возвращает число с плавающей точкой, пред- ставляющее количество секунд, прошедших от начала эпохи. Если в ар- гументе tuple передается недопустимое значение, возбуждает исключение OverflowError sleep(secs) Приостанавливает работу текущего процесса на secs секунд. В аргументе secs передается число с плавающей точкой. strftime(format [, tm]) Преобразует объект tm типа struct_time, представляющий время в том же формате, в каком оно возвращается функцией localtime() или gmtime(), в строку (для обратной совместимости функция strftime() может прини- может прини- прини- прини- мать в аргументе tm кортеж, представляющий время). В аргументе format передается строка формата, в которой могут использоваться следующие спецификаторы формата: Атрибут Значение %a Сокращенное название дня недели %A Полное название дня недели %b Сокращенное название месяца %B Полное название месяца %c Представление даты и времени в соответствии с региональными настройками %d Десятичное представление числа месяца [01-31] %H Десятичное представление часа (в 24-часовой шкале) [00-23] %I Десятичное представление часа (в 12-часовой шкале) [01-12] %j Десятичное представление дня года [001-366] %m Десятичное представление месяца [01-12] %M Десятичное представление минут [00-59] %p Национальный эквивалент обозначения AM (до полудня) и PM (после по- лудня) %S Десятичное представление секунд [00-61] %U Номер недели года [00-53] (считается, что неделя начинается в вос- кресенье, все дни в году до первого воскресенья относятся к неделе с номером 00) %w Десятичное представление дня недели (0 = воскресенье) 510 Глава 19. Службы операционной системы Атрибут Значение %W Н омер недели года [00-53] (считается, что неделя начинается в по- недельник, все дни в году до первого воскресенья относятся к неделе с номером 00) %x Представление даты в соответствии с региональными настройками %X Представление времени в соответствии с региональными настройками %y Десятичное представление года без указания века [00-99] %Y Полное десятичное представление года %Z Название часового пояса (или пустая строка, если часовой пояс не определен) %% Символ % Спецификаторы формата могут включать значения ширины поля вывода и точности представления, как это делается при использовании оператора % форматирования строк. При выходе какого-либо значения в кортеже за допустимый диапазон возбуждается исключение ValueError. При вызове без аргумента используется текущее время. strptime(string [, format]) Анализирует строку string с представлением времени и возвращает объект типа struct_time в том же формате, в каком его возвращают функции lo- caltime() и gmtime(). В строке формата format допускается использовать те же спецификаторы, которые используются в функции strftime(). По умол- умол- умол- чанию аргумент format принимает значение ‘%a %b %d %H:%M:%S %Y’. Этот же формат используется функцией ctime(). В случае обнаружения ошибок в строке string возбуждает исключение ValueError. time() Возвращает текущее время по Гринвичу (Coordinated Universal Time, UTC) в виде количества секунд, прошедших от начала эпохи. tzset() Устанавливает часовой пояс, опираясь на значение переменной окружения TZ в UNIX. Например: os.environ[‘TZ’] = ‘US/Mountain’ time.tzset() ёё os.environ[‘TZ’] = “CST+06CDT,M4.1.0,M10.5.0” time.tzset() Примечания Если допускается указывать год в виде двухзначного числа, это число будет преобразовано в четырехзначное, в соответствии с требованиями стандар- (продолжение) Модуль winreg 511 та POSIX X/Open, согласно которым значения 69-99 преобразуются в 1969- 1999 , а значения 0-68 – в 2000-2068. Точность представления времени в функциях может оказаться хуже, чем можно было бы предположить, исходя из единиц представления, с которы- ми они работают. Например, операционная система может обновлять вну- тренние часы всего 50-100 раз в секунду. См. также Описание модуля datetime (стр. 421). Модуль winreg Модуль winreg (в Python 2 он называется _winreg) предоставляет низко- уровневый интерфейс к реестру Windows. Реестр – это крупное хранили- Windows. Реестр – это крупное хранили- . Реестр – это крупное хранили- ще данных с древовидной структурой, где каждый узел называется клю- чом . Вложенные записи, которые называют подключами, могут содержать значения или другие подключи. Например, значение переменной sys.path обычно хранится в реестре в следующем виде: \HKEY_LOCAL_MACHINE\Software\Python\PythonCore\2.6\PythonPath В этом примере Software является подключом ключа HKEY_LOCAL_MACHINE, Py- thon – подключом ключа Software и так далее. Ключ PythonPath хранит фак- хранит фак- фак- фак- тическое значение переменной sys.path. Доступ к ключам осуществляется с помощью операций открытия и за- крытия. Открытые ключи представлены специальными дескрипторами (которые представляют собой обертки вокруг целочисленных значений де- скрипторов, обычно используемых в Windows). CloseKey(key) Закрывает ранее открытый ключ реестра с дескриптором key. ConnectRegistry(computer_name, key) Возвращает дескриптор предопределенного ключа реестра на удаленном компьютере. В аргументе computer_name передается строка с именем удален- ного компьютера, имеющая вид \\computername. Если в аргументе computer_ name передать значение None, будет использоваться локальный реестр. В ар- гументе key передается дескриптор предопределенного ключа, такого как HKEY_CURRENT_USER или HKEY_ USERS. В случае ошибки возбуждает исключение EnvironmentError . Ниже перечислены все значения HKEY_*, объявленные в мо- дуле _winreg: • HKEY_CLASSES_ROOT • HKEY_CURRENT_CONFIG • HKEY_CURRENT_USER • HKEY_DYN_DATA • HKEY_LOCAL_MACHINE 512 Глава 19. Службы операционной системы • HKEY_PERFORMANCE_DATA • HKEY_USERS CreateKey(key, sub_key) Создает или открывает ключ и возвращает его дескриптор. В аргументе key передается ранее открытый ключ или один из предопределенных клю- передается ранее открытый ключ или один из предопределенных клю- ранее открытый ключ или один из предопределенных клю- ранее открытый ключ или один из предопределенных клю- открытый ключ или один из предопределенных клю- открытый ключ или один из предопределенных клю- ключ или один из предопределенных клю- ключ или один из предопределенных клю- или один из предопределенных клю- или один из предопределенных клю- один из предопределенных клю- один из предопределенных клю- из предопределенных клю- из предопределенных клю- предопределенных клю- предопределенных клю- клю- клю- чей HKEY_*. В аргументе sub_key передается имя ключа, который требуется открыть или создать. Если аргумент key представляет предопределенный ключ, в аргументе sub_key допускается передавать значение None; в этом случае будет возвращен дескриптор ключа key. DeleteKey(key, sub_key) Удаляет подключ sub_key. В аргументе key передается ранее открытый ключ или один из предопределенных ключей HKEY_*. В аргументе sub_key переда- ется строка, идентифицирующая удаляемый ключ. Подключ sub_key не должен содержать вложенные ключи; в противном случае будет возбужде- но исключение EnvironmentError. DeleteValue(key, value) Удаляет из ключа реестра значение с именем value. В аргументе key переда- переда- ется ранее открытый ключ или один из предопределенных ключей HKEY_*. В аргументе value передается строка с именем удаляемого значения. EnumKey(key, index) Возвращает имя подключа по индексу index. В аргументе key передается ра- передается ра- ра- ра- нее открытый ключ или один из предопределенных ключей HKEY_*. В аргу- В аргу- менте index передается целое число, определяющее требуемый ключ. Если значение index выходит за пределы допустимого диапазона, возбуждает ис- ключение EnvironmentError. EnumValue(key, index) Возвращает значение открытого ключа. В аргументе key передается ранее открытый ключ или один из предопределенных ключей HKEY_*. В аргументе index передается целое число, определяющее требуемое значение. Функция возвращает кортеж (name, data, type), где поле name содержит имя значения, data – объект, представляющий значение, и type – целое число, определяю- щее тип значения. Ниже приводится перечень возможных значений поля type , определенных в настоящее время: Код Значение REG_BINARY Двоичные данные REG_DWORD 32-битное число REG_DWORD_LITTLE_ENDIAN 32-битное число с обратным порядком следования байтов REG_DWORD_BIG_ENDIAN 32-битное число с прямым порядком следования байтов Модуль winreg 513 Код Значение REG_EXPAND_SZ Строка, оканчивающаяся символом ‘\0’ и содержа- щая ссылки на имена переменных окружения REG_LINK Символическая ссылка с символами Юникода REG_MULTI_SZ Последовательность строк, оканчивающихся симво- лом ‘\0’. REG_NONE Значение неопределенного типа REG_RESOURCE_LIST Список ресурсов драйвера устройства REG_SZ Строка, оканчивающаяся символом ‘\0’. ExpandEnvironmentStrings(s) Выполняет замену имен переменных окружения в строке Юникода s, ука- занных в виде %name%, их значениями. FlushKey(key) Записывает в реестр атрибуты ключа key, принудительно сохраняет из- менения на диске. Эта функция должна вызываться, только если имеется полная уверенность, что реестр хранится на диске. Возвращает управле- ние, только когда данные будут записаны. В обычных обстоятельствах эту функцию желательно не использовать. RegLoadKey(key, sub_key, filename) Создает подключ и сохраняет в нем информацию из файла. В аргументе key передается ранее открытый ключ или один из предопределенных клю- передается ранее открытый ключ или один из предопределенных клю- ранее открытый ключ или один из предопределенных клю- ранее открытый ключ или один из предопределенных клю- открытый ключ или один из предопределенных клю- открытый ключ или один из предопределенных клю- ключ или один из предопределенных клю- ключ или один из предопределенных клю- или один из предопределенных клю- или один из предопределенных клю- один из предопределенных клю- один из предопределенных клю- из предопределенных клю- из предопределенных клю- предопределенных клю- предопределенных клю- клю- клю- чей HKEY_*. В аргументе sub_key передается строка, идентифицирующая подключ, куда будут загружены данные. В аргументе filename передается имя файла, откуда будут загружаться данные. Содержимое этого файла должно быть создано функцией SaveKey(), а вызывающий процесс должен обладать привилегией SE_RESTORE_PRIVILEGE. Если ключ был получен вызо- вом функции ConnectRegistry(), строка filename должна представлять путь файлу относительно удаленного компьютера. OpenKey(key, sub_key[, res [, sam]]) Открывает ключ. В аргументе key передается ранее открытый ключ или один из предопределенных ключей HKEY_*. В аргументе sub_key передается строка, идентифицирующая открываемый подключ. Аргумент res – заре- зервированное целое число, которое должно быть нулем (по умолчанию). В аргументе sam передается целое число, определяющее маску прав доступа к ключу. По умолчанию принимает значение KEY_READ. Ниже перечислены возможные значения аргумента sam: • KEY_ALL_ACCESS • KEY_CREATE_LINK • KEY_CREATE_SUB_KEY • KEY_ENUMERATE_SUB_KEYS 514 Глава 19. Службы операционной системы • KEY_EXECUTE • KEY_NOTIFY • KEY_QUERY_VALUE • KEY_READ • KEY_SET_VALUE • KEY_WRITE OpenKeyEx() То же, что и OpenKey(). QueryInfoKey(key) Возвращает информацию о ключе в виде кортежа (num_subkeys, num_values, last_modified) , где в поле num_subkeys возвращается количество подключей, в поле num_values – количество значений и в поле last_modified – длинное целое число, содержащее время последнего изменения. Время измеряется в сотнях наносекунд, прошедших с 1 января 1601 года. QueryValue(key,sub_key) Возвращает неименованное значение ключа в виде строки. В аргументе key передается ранее открытый ключ или один из предопределенных ключей HKEY_* . В аргументе sub_key передается имя подключа, если необходимо. При вызове без аргумента sub_key функция возвращает значение, ассоци- ированное с самим ключом key. Возвращается первое значение с пустым именем. Однако тип значения не возвращается (чтобы получить информа- цию о типе значения, следует использовать функцию QueryValueEx). QueryValueEx(key, value_name) Возвращает кортеж (value, type) со значением ключа и информацией о типе этого значения. В аргументе key передается ранее открытый ключ или один из предопределенных ключей HKEY_*. В аргументе value_name пере- пере- дается имя требуемого значения. В качестве типа возвращается одно из це- имя требуемого значения. В качестве типа возвращается одно из це- имя требуемого значения. В качестве типа возвращается одно из це- требуемого значения. В качестве типа возвращается одно из це- требуемого значения. В качестве типа возвращается одно из це- значения. В качестве типа возвращается одно из це- значения. В качестве типа возвращается одно из це- . В качестве типа возвращается одно из це- В качестве типа возвращается одно из це- лочисленных значений, которые были перечислены в описании функции EnumValue() SaveKey(key, filename) Сохраняет ключ key и все вложенные подключи в файле. В аргументе key передается ранее открытый ключ или один из предопределенных ключей HKEY_* . В аргументе filename должно передаваться имя несуществующего файла без расширения. Кроме того, вызывающий процесс должен обладать правом на резервное копирование. SetValue(key, sub_key, type, value) Устанавливает значение ключа. В аргументе key передается ранее откры- тый ключ или один из предопределенных ключей HKEY_*. В аргументе sub_ key передается имя подключа, в который будет записано значение. В аргу- менте type передается целочисленный код типа значения, причем в настоя- щее время допускается использовать только тип REG_SZ. В аргументе value передается строка, содержащая значение. Если подключ sub_key не суще- не суще- суще- суще- Модуль winreg 515 ствует, он будет создан. Для выполнения этой операции ключ key должен быть открыт с правами доступа KEY_SET_VALUE. SetValueEx(key, value_name, reserved, type, value) Устанавливает значение ключа. В аргументе key передается ранее откры- тый ключ или один из предопределенных ключей HKEY_*. В аргументе value_ name передается имя значения. В аргументе type передается целочисленный код типа значения, из числа тех, что перечислены в описании функции EnumValue() . В аргументе value передается строка, содержащая новое зна- чение. Даже при передаче числовых значений (например, REG_DWORD) аргу- мент value все равно должен быть строкой, содержащей двоичные данные. Такую строку можно создать с помощью модуля struct. Аргумент reserved в настоящее время игнорируется и может принимать любые значения (зна- чение этого аргумента никак не используется). Примечания • Функции, возвращающие объект HKEY ключа реестра Windows, воз- HKEY ключа реестра Windows, воз- ключа реестра Windows, воз- Windows, воз- , воз- вращают специальный объект дескриптора класса PyHKEY. Этот объект может быть преобразован в дескриптор, используемый функциями Win32 API, с помощью функции int(). Кроме того, объекты этого класса поддерживают протокол менеджеров контекста, что, например, позво- ляет автоматически закрывать дескриптор: with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, “spam”) as key: инструкции |