Sys python что это
Модуль sys в Python
Модуль sys в Python предоставляет простые функции, которые позволяют нам напрямую взаимодействовать с интерпретатором.
Функции, предоставляемые модулем sys, позволяют нам работать с базовым интерпретатором, независимо от того, является ли он платформой Windows, Macintosh или Linux. В этом уроке мы рассмотрим эти функции и то, что с ними можно сделать.
import sys
Обратите внимание, что перед запуском каких-либо функций нам необходимо импортировать их, используя команду ниже.
sys.modules
Эта функция дает имена существующих модулей Python, импортированных текущей оболочкой. Выполним это в системе:
Я удалил много модулей, так как изначально Python по умолчанию импортирует много модулей. Таким образом, вывод может отличаться, когда вы выполните эту команду в настройках.
sys.argv
Эта функция собирает аргументы String, передаваемые скрипту python. Давайте выполним это в системе, написав скрипт:
sys.path
Эта функция просто отображает PYTHONPATH, установленный в текущей системе. Давайте выполним это в системе, написав скрипт:
sys.stdin
Эта функция используется для взятия. Давайте выполним это в системе, написав скрипт:
Вероятно, это наиболее часто используемая функция в модуле sys, так как это стандартный способ получения ввода от пользователя.
sys.copyright
Эта строка просто отображает информацию об авторских правах на текущую установленную версию Python. Давайте выполним это в системе, написав скрипт:
sys.exit
Этот метод заставляет интерпретатор внезапно завершать текущий поток выполнения. Давайте выполним это в системе, написав скрипт:
sys.getrefcount
Этот метод модуля sys возвращает количество ссылок на объект, в котором он используется. Python отслеживает это значение, поскольку, когда это значение достигает 0 в программе, память для этой переменной очищается. Давайте выполним это в системе, написав скрипт:
Разбираем модуль sys
Модуль sys предоставляет системе особые параметры и функции. В данном разделе мы рассмотрим следующее:
sys.argv
Значение sys.argv – это список аргументов командной строки, которые причастны к скрипту Python. Первый аргумент, argv[0], имеет аналогичное скрипту Python наименование. В зависимости от платформы, на которой вы работаете, первый аргумент может содержать полный путь к скрипту или к названию файла. Для дополнительных деталей обратитесь к документации. А тем временем, попробуем поработать с парочкой примеров, чтобы познакомиться с этим инструментом:
Если вы запустите это в интерпретаторе, вы получите список с пустой строкой. Давайте создадим файл под названием sysargv.py, со следующим содержимым:
Теперь запустите код в IDLE. Вы увидите список с одним элементом, который содержит путь к вашему скрипту. Попробуем передать скрипту несколько аргументов. Откройте окно терминала \ консоли и при помощи команды cd измените каталоги на тот, в котором находится скрипт. После этого, запустите что-то наподобие этого:
sys.argv
Обратите внимание на то, что будет выведено на экран:
Первый аргумент – это название файла нашего скрипта. Следующие два аргумента в списке – это те, что мы передали нашему скрипту в командной строке.
sys.executable
Значение sys.executable – это полный путь к интерпретатору Python. Это очень полезно, когда вы используете чей-то компьютер, и вам нужно узнать, где установлен Python. В некоторых системах, данная команда не сработает, и выдаст пустую строку с надписью None. Посмотрим, как пользоваться этой функцией:
sys.exit
Данная функция позволяет разработчику выйти из Python. Функция exit принимает необязательный аргумент, обычно целое число, которое дает статус выхода. Ноль считается как успешное завершение. Обязательно проверьте, имеет ли ваша операционная система какие-либо особые значения для своих статусов выхода, чтобы вы могли следить за ними в своем собственном приложении. Обратите внимание на то, что когда вы вызываете exit, это вызовет исключение SystemExit, которое позволяет функциям очистки работать в конечных пунктах блоков try / except. Давайте взглянем на то, как вызывается данная функция:
Запустив данный код в IDLE, вы увидите возникшую ошибку SystemExit. Давайте создадим несколько скриптов для теста. Для начала вам нужно создать основной скрипт, программу, которая будет вызывать другой скрипт Python. Давайте назовем его “call_exit.py”. Скрипт должен содержать следующее:
Теперь создайте скрипт Python под названием“exit.py” и сохраните его в той же папке. Вставьте в него следующий код:
Теперь давайте запустим его:
sys.exit
Как вы могли заметить, написанный нами скрипт exit вернул ноль, так что он успешно заработал. Получается, мы заодно научились вызывать разные скрипты Python изнутри самого Python!
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
sys.path
Значение функции path модуля sys – это список строк, которые указывают путь поиска для модулей. Как правило, данная функция указывает Python, в каких локациях смотреть, когда он пытается импортировать модуль. В соответствии с документацией Python, sys.path инициализируется из переменной окружения PYTHONPATH, плюс зависимое от установки значение, указанное по умолчанию. Давайте взглянем на пример:
Данная функция может быть весьма полезной во время отладки причины, по которой модуль не импортируется. Вы также можете изменить путь. Так как данная функция является путем, мы можем добавлять или удалять путь из неё. Давайте взглянем на то, как добавлять путь:
Удаление пути я оставлю как задание для читателя
sys.platform
Значение sys.platform – идентификатор платформы. Вы можете использовать sys.platform чтобы добавлять модули к sys.path, импортировать разные модули, в зависимости от платформы, или запускать разные части кода. Давайте взглянем:
В данном примере мы видим, что Python работает в Windows. Вот пример того, как мы можем воспользоваться данной информацией:
Данный код показывает способы проверки того, используем ли мы определенную операционную систему. Если мы используем Windows, мы получим определенную информацию из реестра Windows, при помощи модуля Python под названием _winreg. Если мы используем Linux, мы можем выполнить команду ls, чтобы получить информацию о каталоге, в котором мы находимся.
sys.stdin / stdout / stderr
Stdin, stdout и stderr сопоставляются с файловыми объектами, которые соответствуют стандартным входам, выходам и потокам ошибок интерпретатора соответственно. Функция stdin используется для всех входов, используемых интерпретатором, за исключением скриптов, тогда как stdout используется для выходов операторов print и expression. Главная причина, по которой я акцентирую на этом внимание, заключается в том, что в какой-то момент вам нужно будет перенаправить stdout или stderr, или обе функции к файлу, такому как log, либо же какой-либо дисплей в пользовательском графическом интерфейсе, созданным вами. Вы также можете перенаправить stdin, но с такими случаями я практически не сталкивался.
Подведем итоги
Существует много других значений и методов в модуле sys. Обратитесь к документации Python, а именно к секции 27.1, если вам нужно углубиться в данный вопрос. Мы многому научились из данной статьи, поздравляю. Теперь вы знаете, как выйти из программы Python, как получить информацию о платформе, работать с аргументами, переданными командной строке, и многому другому.
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
Библиотека sys
Как и любой другой язык, Python обладает большим набором дополнительных инструментов, которые называются модулями. С их помощью можно реализовать задачу любой сложности. Одни модули устанавливаются вместе с интерпретатором из официального репозитория/сайта, другие нужно скачивать отдельно. Программист может не только использовать готовые библиотеки, но и писать свои. Рассмотрим библиотеку sys, которая входит в состав дистрибутива Python.
Что такое модуль sys
Модуль sys предоставляет программисту набор функций, которые дают информацию о том, как интерпретатор Python взаимодействует с операционной системой.
Модуль sys даёт следующую информацию:
Модуль sys часто используют с модулем os. С помощью sys получают нужную информацию об операционной системе, чтобы избежать непредвиденных ошибок, а с помощью os взаимодействуют с ней (работа с файлами, запуск программ на выполнение, обработка путей и так далее).
Как подключить библиотеку
Все библиотеки (модули) в Python 3 подключаются с помощью команды «import имя библиотеки». Существуют разные варианты подключения, используемые при определённых обстоятельствах:
Функции и константы модуля sys
Библиотека sys позволяет программисту получать информацию об интерпретаторе Python и операционной системе, работать с вводом и выводом, менять параметры модуля и обрабатывать возникающие ошибки.
Информация о системных параметрах
sys.dllhandle
Целое число, которое определяет дескриптор динамически подключаемой библиотеки Python. Работает только в операционной системе Windows.
sys.exec_prefix
Строка, которая показывает, в какой каталог установлен Python. (обычно это «/usr/local»).
sys.executable
Строка, показывающая абсолютный путь к двоичному исполняемому файлу интерпретатора Python.
Если по какой-то причине определить путь к интерпретатору нельзя, sys.executable будет пустой строкой или None.
Вот пример её вывода:
sys.getfilesystemencoding()
Функция возвращает кодировку системы, которая используется для преобразования имён файлов из Unicode в байты. Для лучшей совместимости нужно всегда использовать строки, хотя имена файлов в виде байтов тоже поддерживаются.
Разные операционные системы используют различные кодировки:
Примечания:
sys.getwindowsversion()
Функция работает только с Windows. Она возвращает кортеж, описывающий, какая версия Windows сейчас запущена. Кортеж содержит до10 элементов, показывающих различную информацию об операционной системе (версия сборки, версия платформы и другая информация).
Чтобы получить доступ к определённому компоненту кортежа, достаточно обратиться к нему по индексу «sys.getwindowsversion()[1]» или имени «sys.getwindowsversion().platform». Для сохранения совместимости с предыдущими версиями, только первые пять элементов можно получить по индексу.
Перечислим все 10 вариантов ниаменований: major, minor, build, platform, service_pack, service_pack_minor, service_pack_major, suite_mask, product_type и platform_version.
Некоторые элементы могут выводить несколько значений, например, элемент «platform_version» возвращает основную версию, дополнительную версию и номер сборки ОС.
sys.platform
Строка, дающая информацию об используемой операционной системе (идентификатор платформы). Например, «win32».
sys.winver
Содержит номер версии Python, который используется в реестре Windows. Например, «3.8-32».
Используется только в информационных целях, то есть даже если изменить значения «sys.winver», значения в реестре Windows не изменятся.
Информация о параметрах интерпретатора
sys.argv
Список, состоящий из аргументов командной строки, которые используются в текущем сценарии Python.
argv[0] — это имя скрипта. Если команда выполнена с опцией «-c», то в argv[0] помещает строка «-c». Если имя скрипта не было передано интерпретатору, то argv[0] будет пустой строкой.
sys.byteorder
Показывает порядок следования байтов. Различные платформы могут использовать как «big-endian» — прямая нумерация байтов, так и «little-endian» — обратная нумерация байтов. Например, при записи целого двухбайтового числа в памяти комрьютера, в случае прямой нумерации вначале идет старший байт, а затем младший. При обратной — наоборот, вначале записывается младший.
sys.builtin_module_names
Кортеж, который показывает все доступные интерпретатору Python модули. sys.builtin_module_names — единственный способ получить эту информацию, любые другие инструменты могут показать лишь список импортированных в скрипт модулей.
sys.breakpointhook()
sys.copyright
Строка, дающая информацию об авторских правах на интерпретатор Python.
sys._current_frames()
Возвращает словарь, дающий информацию о активных потоках.
Функция используется только для внутренних или специализированных целей.
Здесь был создан поток и с помощью этой функции можно отследить что какой поток в данный момент выполняет. Указаны наименование скрипта, выполняемая строка кода и наименование выполняемой функции.
sys.flags
Кортеж, который определяет статус флагов командной строки, все атрибуты доступны только для чтения.
sys.float_info
Именованный кортеж, который содержит информацию о типе «float». Он содержит данные точности и внутреннем представлении чисел этого типа. Значения соответствуют константам с плавающей точкой, определенным в файле float.h для языка программирования C.
Атрибут | Макрос float.h | Объяснение |
epsilon | DBL_EPSILON | Минимально возможная разница между 1.0 и значением, больше чем 1.0, представленная как «float» |
dig | DBL_DIG | Максимальное количество цифр, которые могут быть точно представлены в числе с плавающей точкой |
mant_dig | DBL_MANT_DIG | Точность чисел с плавающей точкой |
max | DBL_MAX | Максимально возможное представление бесконечного числа с плавающей точкой |
max_exp | DBL_MAX_EXP | Максимальное целое число e, такое что radix**(e-1) — представимое конечное число с плавающей точкой |
max_10_exp | DBL_MAX_10_EXP | Максимальное целое число e, такое что 10**e входит в диапазон конечных чисел с плавающей точкой |
min | DBL_MIN | Минимальное положительное число «float» |
min_exp | DBL_MIN_EXP | Минимальное целое число e, такое что radix**(e-1) — приведённое к норме число с плавающей точкой |
min_10_exp | DBL_MIN_10_EXP | Минимальное целое число e, такое что 10**e — приведённое к норме число с плавающей точкой |
radix | FLT_RADIX | Основание для экспоненциальной формы представления |
rounds | FLT_ROUNDS | Целочисленная константа, которая показывает, какой режим округления используется для арифметических операций |
sys.float_repr_style
Строка, которая показывает поведение функции repr() для чисел типа «float». Если строка имеет значение «short», то для конечного числа x функция repr(x) пытается создать такую строку, что float(repr(x)) равен x с минимальным количеством десятичных цифр. Если float_repr_style имеет значение «legacy», а repr(x) ведёт себя так же, как до версии Python 3.1 — округлял до 17 десятичных цифр.
sys.getdefaultencoding()
Функция, которая возвращает имя кодировки, используемой по умолчанию, например, «utf-8».
sys.getallocatedblocks()
Возвращает количество блоков памяти, используемых интерпретатором, независимо от их размера. В основном функция используется для отслеживания и отладки утечек памяти.
Если по какой-то причине интерпретатор не может вычислить информацию о количестве блоков памяти, функция вернёт ноль.
sys.getandroidapilevel()
Доступно только на платформе Android. Возвращает версию сборки API Android.
sys.getrecursionlimit()
Возвращает максимально возможное значение рекурсии и максимальную глубину стека интерпретатора. Этот предел предотвращает переполнение стека C, который в свою очередь приводит к сбою Python. Установить предел рекурсии можно с помощью функции setrecursionlimit().
Пример использования рекурсии — один из возможных вариантов нахождения чисел Фибоначчи.
sys.getswitchinterval()
Возвращает число, определяющее, частоту переключения потоков. Это вещественное число. Значение в секундах. Например: «0.005».
sys.hexversion
Номер версии интерпретатора Python, закодированный одним числом. Это число увеличивается с каждой версией, включая все виды релизов.
Это число называется «hexversion», потому что оно принимает понятный вид, только если его передать в функцию hex().
Пример версии: 50856176.
sys.hash_info
Кортеж, содержащий информацию о параметрах хеша.
Атрибут | Объяснение |
width | Сколько битов используется для значений хеша |
modulus | Простой модуль, используемое для числовой схемы хеша |
inf | Значение хеша, возвращаемое для +∞ |
nan | Значение хеша, возвращаемое для типа nan |
imag | Множитель, который используется для представления мнимой части комплексного числа |
algorithm | Наименование алгоритма, используемого для хеширования строк, байтов и представления памяти |
hash_bits | Внутренний размер вывода алгоритма хеширования |
seed_bits | Размер начального ключа алгоритма хеширования |
sys.implementation
Объект, дающий информацию о запущенном в данный момент интерпретаторе Python.
Объект должен содержать атрибуты: имя, версия, версия в шестнадцатеричном представлении, дескриптор кэша.
sys.int_info
Кортеж, дающий информацию о представлении целых чисел в интерпретаторе Python. Все атрибуты доступны только для чтения.
sys.maxsize
Число, показывающее, какое максимально значение может принять переменная типа Py_ssize_t. Это также максимальный размер списков, словарей, строк и других контейнеров. Пример значения: 2147483647.
sys.maxunicode
Число, показывающее, какое максимальное количество битов может выделяться на представление символа Unicode. Например: 1114111.
sys.modules
Словарь, дающий информацию о загруженных в скрипт модулях.
sys.path
Список строк, который показывает, в каких директориях ищутся модули. Инициализируется из переменной среды PYTHONPATH и установок по умолчанию.
Первый элемент списка (path[0]) — это директория, в которой находится скрипт, запускающий интерпретатор Python.
Этот список может изменяться программой. В sys.path могут быть добавлены только строки и байтовые строки, другие типы данных игнорируются при импорте.
sys.dont_write_bytecode
sys.setrecursionlimit(предел)
Функция, позволяющая установить предел глубины рекурсии для интерпретатора Python. Предел предотвращает возможные ошибки, возникающие при переполнении стека в C.
Максимальный предел рекурсии зависит от платформы. Пользователь может установить большой предел, если он требуется приложению и поддерживается платформой, однако нужно быть осторожным, иначе слишком большой предел может привести к крашу программы.
sys.setswitchinterval(интервал)
Позволяет установить, с какой скоростью будут переключаться потоки (время в секундах).
sys.version
Строка, состоящая из номера версии Python, а также дополнительной информации о номере сборки и используемом компиляторе.
sys.api_version
Информацию об используемой интерпретатором версии C API. Применяется при отладке конфликтов, возникающих при взаимодействии Python и дополнительных модулей.
Пример значения: 1013.
Функции для работы с объектами
sys.getrefcount(object)
sys.getsizeof(object[, default])
Показывает, сколько байтов выделяется для хранения объекта любого типа.
Функция вызывает метод __sizeof__() у объекта. К этому значению добавляется размер данных выделенных для сборщика мусора, если объект им управляется.
sys._getframe([depth])
Возвращает объект кадра из стека вызова. Если передан необязательный аргумент «depth», то функция возвращает объект кадра, который ниже на заданное количество вершины стека.
Если значение «depth» больше, чем стек вызовов, вызывается исключение ValueError.
Значение по умолчанию для «depth» равно нулю, это значит, что функция вернёт самый верхний кадр стека.
Для того, чтобы было проще разобраться приведём пример. Мы вызовим функцию example(), которая в свою очередь вызовит функцию test(). Все эти вызовы будут записаны поочерёдно в стек. С помощью _getframe() получим объекты кадров из стека:
Вот что будет возаращено в результате выполнения:
Функции, выполняющие действия и преобразования
sys.call_tracing(функция, аргументы)
Вызывает функцию, с включённой трассировкой, состояние трассировки сохраняется и восстанавливается после выполнения функции. Это используют, когда надо отладить какой-то код с какой-то контрольной точки.
sys._clear_type_cache()
Очищает внутренний кэш типа, который используется для быстрого поиска атрибутов и методов. Функция используется только при отладке для удаления ненужных ссылок.
sys.exit([arg])
Если передан ноль, завершение работы происходит в обычном режиме, любое другое значение приводит к «неуспешному завершению». Если аргумент не входит в нужный числовой диапазон, функция может вернуть неопределённые результаты. Некоторые программисты придерживают определённых правил при указании значения аргумента, например, «2» может обозначать выход из-за синтаксической ошибки, а «3» — выход из-за переполнения стека.
sys.exit — это быстрый способ выйти из программы при возникновении ошибки.
sys.stdin
sys.stdout
sys._enablelegacywindowsfsencoding()
Изменяет кодировку файловой системы на «mbsc» и режим ошибок на «replace».
Действует также, как и определение переменной среды PYTHONLEGACYWINDOWSFSENCODING перед запуском Python.
Функции для работы с ошибками и исключениями
sys.exc_info()
Функция, возвращающая кортеж, состоящий из трёх элементов, которые показывают информацию об обрабатываемом в настоящее время исключении.
Если исключения не обрабатываются, кортеж состоит из трёх элементов со значением None. В противном случае он имеет значения: тип, значения, трассировка.
sys.last_type, sys.last_value, sys.last_traceback
sys.getfilesystemencodeerrors()
Показывает, какой режим обработки неподдерживаемых кодировкой символов при преобразовании имён файлов из Unicode в байтовое представление. В Windows по умолчанию значение «surrogatepass» или «replace». На других операционных системах «surrogateescape».
sys.stderr
Стандартный поток вывода ошибок, в который отправляются все ошибки интерпретатора. Файло-подобный объект, считывать данные можно с помощью его метода read.
sys.settrace(функция трассировки)
Устанавливает функцию трассировки системы, которая позволяет осуществлять отладку исходного кода Python. Функция ориентирована на работу с одним потоком, чтобы отладчик поддерживал несколько потоков, нужно зарегистрировать функцию трассировки с settrace() для каждого потока.
Функции трассировки должны иметь три аргумента: frame, event и arg. Frame — это текущий кадр стека, event — это событие: «call», «line», «return», «exception» или «opcode», а arg — это зависимый от типа события аргумент.
Если работа функции привела к ошибке, она сбрасывается, как при вызове settrace(None).
События имеют следующие значения:
Вот пример: создадим функцию для тарссировки. Она будет просто выводить в консоль аргументы, которые получает. Установим её для трассировки. После этого напишем немного кода: вызовим функцию, которая расчитываем сумму двух чисел. Результат сложения выведем в консоль.
Результат выполнения программы будет следующий:
Здесь мы видим, что как только вызвалась функция sum, сразуже сработала наша функция трассировки с событием «call».