Что такое stdin python

Python – Stdin, Stdout и STDERR

Прежде чем пройти через эту статью, давайте понять, какие условия stdin, Stdout и Stderr есть.

Python – Stdin, Stdout и STDERR

Стандартный ввод – Это Ручка-файл что пользовательская программа читает, чтобы получить информацию от пользователя. Мы даем ввод на стандартный вход ( stdin ).

Стандартный выход – Пользовательская программа записывает обычную информацию для этой обработки файла. Вывод возвращается через стандартный выход ( stdout ).

1. Sys.Stdin.

Python’s SYS модуль Предоставляет нам все три файловых объекта для STDIN, STDOUT и STDERR. Для объекта входного файла мы используем Sys.Stdin Отказ Это похоже на файл, где вы можете открыть и закрыть его, как и любой другой файл.

Давайте понять это через базовый пример:

Вышеуказанный фрагмент продолжает читать вход от stdin и печатает сообщение на консоль ( stdout ) до слова Выход встречается.

Примечание : Мы обычно не закрываем по умолчанию stdin Файл объект, хотя это разрешено. Итак, stdin_fileno.close () Допустимый код Python.

Теперь, когда мы немного знаем о stdin Давайте перейдем к stdout Отказ

2. Sys.Stdout

Приведенный ниже фрагмент показывает, что мы получаем выход на консоль, если мы пишем на sys.stdout Отказ

3. Sys.Stderr.

Это похоже на sys.stdout Потому что он также печатает непосредственно к консоли. Но разница в том, что это Только Отпечатки Исключения и Сообщения об ошибках Отказ (Вот почему это называется Стандартная ошибка ).

Давайте проиллюстрируем это с примером.

Как вы можете наблюдать, для всех входных строк мы пытаемся добавить в целое число, которое поднимет исключение. Мы ловим все такие исключения и распечатаем другое отладочное сообщение, используя Sys.Stderr Отказ

Перенаправление в файл

Приведенный ниже фрагмент перенаправляет вывод ( stdout ) в файл под названием Yump.txt Отказ

Итак, мы не увидим ничего напечатанного к консоли, потому что теперь она печатается к самому файлу! Это сущность выходного перенаправления. Вы «перенаправляете» вывод на некоторое другое место. (На этот раз до output.txt вместо консоли)

Как видите, мы напечатали вывод как на консоль, а также для Yump.txt Отказ

Сначала мы сохраняем оригинал sys.stdout Объект обработчика файла к другой переменной. Нам не только нужно это восстановить sys.stdout к старому обработчику (указывая на консоль), но мы также можем печатать на консоли, используя эту переменную!

Обратите внимание, что после записи в файл мы закрываем его, похоже на то, как мы закрываем файл, потому что этот файл все еще был открыт.

Мы наконец восстановим обработчик sys.stdout на консоль, используя переменную stdout_fileno Отказ

Подобный процесс можно соблюдать для перенаправления ввода и ошибки, замена sys.stdout с Sys.Stdin или Sys.Stderr и работа с входами и исключениями вместо вывода.

Заключение

Источник

Библиотека 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Объяснение
epsilonDBL_EPSILONМинимально возможная разница между 1.0 и значением, больше чем 1.0, представленная как «float»
digDBL_DIGМаксимальное количество цифр, которые могут быть точно представлены в числе с плавающей точкой
mant_digDBL_MANT_DIGТочность чисел с плавающей точкой
maxDBL_MAXМаксимально возможное представление бесконечного числа с плавающей точкой
max_expDBL_MAX_EXPМаксимальное целое число e, такое что radix**(e-1) — представимое конечное число с плавающей точкой
max_10_expDBL_MAX_10_EXPМаксимальное целое число e, такое что 10**e входит в диапазон конечных чисел с плавающей точкой
minDBL_MINМинимальное положительное число «float»
min_expDBL_MIN_EXPМинимальное целое число e, такое что radix**(e-1) — приведённое к норме число с плавающей точкой
min_10_expDBL_MIN_10_EXPМинимальное целое число e, такое что 10**e — приведённое к норме число с плавающей точкой
radixFLT_RADIXОснование для экспоненциальной формы представления
roundsFLT_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() получим объекты кадров из стека:

Вот что будет возаращено в результате выполнения:

Что такое stdin python. Смотреть фото Что такое stdin python. Смотреть картинку Что такое stdin python. Картинка про Что такое stdin python. Фото Что такое stdin python

Функции, выполняющие действия и преобразования

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).

События имеют следующие значения:

Вот пример: создадим функцию для тарссировки. Она будет просто выводить в консоль аргументы, которые получает. Установим её для трассировки. После этого напишем немного кода: вызовим функцию, которая расчитываем сумму двух чисел. Результат сложения выведем в консоль.

Результат выполнения программы будет следующий:

Что такое stdin python. Смотреть фото Что такое stdin python. Смотреть картинку Что такое stdin python. Картинка про Что такое stdin python. Фото Что такое stdin python

Здесь мы видим, что как только вызвалась функция sum, сразуже сработала наша функция трассировки с событием «call».

Источник

Python — stdin, stdout и stderr

Стандартный ввод — это дескриптор файла, который пользовательская программа читает, чтобы получить информацию от пользователя. Мы передаем ввод на стандартный ввод (stdin).

Стандартный вывод — программа пользователя записывает обычную информацию в этот дескриптор файла. Вывод возвращается через стандартный вывод (stdout).

Стандартная ошибка — программа пользователя записывает информацию об ошибке в этот дескриптор файла. Ошибки возвращаются через стандартную ошибку (stderr).

Python предоставляет нам файловые объекты, представляющие stdin, stdout и stderr. Давайте посмотрим, как мы могли бы работать с этими объектами, чтобы использовать ввод и вывод программы.

1. sys.stdin

Давайте разберемся на простом примере:

Примечание. Обычно мы не закрываем объект файла stdin по умолчанию, хотя это разрешено. Итак, stdin_fileno.close() — допустимый код Python.

2. sys.stdout

3. sys.stderr

Это похоже на sys.stdout потому что он также sys.stdout непосредственно выводит в консоль. Но разница в том, что он печатает только сообщения об исключениях и ошибках. (Вот почему он называется стандартной ошибкой).

Проиллюстрируем это на примере.

Перенаправление в файл

Сначала мы сохраняем исходный sys.stdout обработчик файла sys.stdout в другую переменную. Нам это нужно не только для восстановления sys.stdout в старом обработчике (указывающем на консоль), но мы также можем печатать на консоль, используя эту переменную!

Обратите внимание, что после записи в файл мы закрываем его, аналогично тому, как мы закрываем файл, потому что этот файл все еще был открыт.

Источник

Python – stdin, stdout, and stderr

Standard input – This is the file-handle that a user program reads to get information from the user. We give input to the standard input (stdin).

Standard output – The user program writes normal information to this file-handle. The output is returned via the Standard output (stdout).

Standard error – The user program writes error information to this file-handle. Errors are returned via the Standard error (stderr).

Python provides us with file-like objects that represent stdin, stdout, and stderr. Let us look at how we could work with these objects to work with the input and output of our program.

1. sys.stdin

Let us understand this through a basic example:

Output

The above snippet keeps reading input from stdin and prints the message to the Console ( stdout ) until the word exit is encountered.

NOTE: We do not normally close the default stdin file object, although it is allowed. So stdin_fileno.close() is valid Python code.

2. sys.stdout

Output

3. sys.stderr

This is similar to sys.stdout because it also prints directly to the Console. But the difference is that it only prints Exceptions and Error messages. (Which is why it is called Standard Error).

Let us illustrate this with an example.

Output

Redirection to a file

Output

We first save the original sys.stdout file handler object to another Variable. We not only need this to restore sys.stdout to the old handler (pointing to the Console), but we can also print to the console using this Variable!

Note that after writing to the file, we close it, similar to how we close a file because that file was still open.

A similar process can be followed for Input and Error redirection, replacing sys.stdout with sys.stdin or sys.stderr and working with Inputs and Exceptions instead of Output.

Conclusion

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *