Модуль sys
Один из модулей, предоставляющих внутреннюю информацию о самом Python, - это модуль sys. Вы используете модуль, импортируя его и ссылаясь на его содержимое (как, например, переменные, функции и классы) с помощью нотации точка (.). Модуль sys содержит множество переменных и функций, которые предоставляют интересную и подробную информацию о текущем интерпретаторе Python. Давайте рассмотрим некоторые из них. И снова мы собираемся, запустив Python интерактивно, вводить команды в приглашении Python. Первое, что мы сделаем - это импортируем модуль sys. Затем введем переменную sys.executable, которая содержит путь к интерпретатору Python:
Листинг 6. Импортируем модуль sys
$ python Python 2.2.2 (#1, Oct 28 2002, 17:22:19) [GCC 3.2 (Mandrake Linux 9.0 3.2-1mdk)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.executable '/usr/local/bin/python'
Если мы введем строку кода, который не содержит ничего кроме имени объекта, Python ответит, показывая представление этого объекта, которое - для простых объектов - как правило, есть значение этого объекта. В этом случае, поскольку выведенное значение заключено в кавычки, мы можем предположить, что sys.executable, вероятно, строковый объект. Позже мы изучим другие, более точные, способы определения типа объекта, однако просто ввод имени объекта в приглашении Python - это быстрый и легкий вид интроспекции.
Давайте рассмотрим некоторые другие полезные атрибуты модуля sys.
Переменная platform сообщает, в какой операционной системе мы работаем:
Атрибут sys.platform
>>> sys.platform 'linux2'
Текущая версия Python доступна и в виде строки, и в виде кортежа (кортеж содержит последовательность объектов):
Листинг 8. Атрибуты sys.version и sys.version_info
>>> sys.version '2.2.2 (#1, Oct 28 2002, 17:22:19) \n[GCC 3.2 (Mandrake Linux 9.0 3.2-1mdk)]' >>> sys.version_info (2, 2, 2, 'final', 0)
Переменная maxint показывает наибольшее допустимое целое значение:
Атрибут sys.maxint
>>> sys.maxint 2147483647
Переменная argv - это список, содержащий параметры командной строки, если она была задана. Первый элемент, argv[0], это путь к скрипту, который был запущен. Когда мы работаем с Python интерактивно, его значением является пустая строка:
Листинг 10. Атрибут sys.argv
>>> sys.argv ['']
Если мы запустим другую оболочку Python, как, например, PyCrust (за более подробной информацией о PyCrust см. ссылку, приведенную в ), то увидим что-нибудь вроде этого:
Листинг 11. Атрибут sys.argv при использовании PyCrust
>>> sys.argv[0] '/home/pobrien/Code/PyCrust/PyCrustApp.py'
Переменная path - это путь поиска модуля, список каталогов, в которых Python будет искать модули во время импорта. Пустая строка, ' ', в первой позиции относится к текущему каталогу:
Листинг 12. Атрибут path
>>> sys.path ['', '/home/pobrien/Code', '/usr/local/lib/python2.2', '/usr/local/lib/python2.2/plat-linux2', '/usr/local/lib/python2.2/lib-tk', '/usr/local/lib/python2.2/lib-dynload', '/usr/local/lib/python2.2/site-packages']
Переменная modules - это словарь, который отображает имена модулей в объекты модулей для всех загруженных в текущий момент модулей. Как можно видеть, Python загружает определенные модули по умолчанию:
Листинг 13. Атрибут sys.modules
>>> sys.modules {'stat': <module 'stat' from '/usr/local/lib/python2.2/stat.pyc'>, '__future__': <module '__future__' from '/usr/local/lib/python2.2/__future__.pyc'>, 'copy_reg': <module 'copy_reg' from '/usr/local/lib/python2.2/copy_reg.pyc'>, 'posixpath': <module 'posixpath' from '/usr/local/lib/python2.2/posixpath.pyc'>, 'UserDict': <module 'UserDict' from '/usr/local/lib/python2.2/UserDict.pyc'>, 'signal': <module 'signal' (built-in)>, 'site': <module 'site' from '/usr/local/lib/python2.2/site.pyc'>, '__builtin__': <module '__builtin__' (built-in)>, 'sys': <module 'sys' (built-in)>, 'posix': <module 'posix' (built-in)>, 'types': <module 'types' from '/usr/local/lib/python2.2/types.pyc'>, '__main__': <module '__main__' (built-in)>, 'exceptions': <module 'exceptions' (built-in)>, 'os': <module 'os' from '/usr/local/lib/python2.2/os.pyc'>, 'os.path': <module 'posixpath' from '/usr/local/lib/python2.2/posixpath.pyc'>}