аватар question@mail.ru · 01.01.1970 03:00

Реализация stdin и stdout

В задаче (кроме самого алгоритма решения) необходимо реализовать прием данных через stdin, а вывод через stdout. До этого обычно реализовывал прием через input, а вывод через print или просто возвращал значение без печати через retu. Как принять данные с помощью stdin/stdout не улавливаю. Огромная просьба, дать ссылку или пример кода, чтобы разобраться.

аватар question@mail.ru · 01.01.1970 03:00

По умолчанию читает данные из , печатает данные в . Так что можете считать вашу задачу решённой.

В Питоне stdin, stdout представлены объектами (, как правило), которые в общем случае могут быть любого типа (если их интерфейс достаточно file-like) и могут быть переопределены кем-угодно (IDLE, bpython, ipython, IDE, win-unicode-console, etc). Иногда достаточно предоставить объект, который поддерживает единственный метод .write(), если нужно только print() функцию поддерживать. В других случаях, даже экземпляр (тип sys.stdin/sys.stdout по умолчанию) может быть недостаточным, если не возвращает настоящий file descriptor (см. детали в ).

При запуске Питона, sys.stdin/sys.stdout обычно указывают на стандартные потоки ввода/вывода, унаследованные от родительского процесса или полученные от консоли. Интерактивный ввод/вывод как правило связан с терминалом. Из оболочки легко перенаправить ввод/вывод из файла, канала (pipe)

$ python ваша-программа.py <входной-файл# `sys.__stdin__` это входной-файл$ echo abc | python ваша-программа.py# `sys.__stdin__` это pipe (`echo` пишет с одного конца, мы читаем с другого)

Работа напрямую с sys.stdin, sys.stdout такая же как с другими текстовыми файлами. Например, чтобы прочитать текстовые строчки из стандартного ввода и записать введённые символы (Unicode codepoint) в каждой строке в обратном порядке в стандартный вывод:

#!/usr/bin/env python3import sysfor line in sys.stdin:    print(line.rstrip('\n')[::-1])

Кодировка, используемая sys.stdin/sys.stdout, чтобы текст в байты превратить и обратно, может зависеть от окружения. Чтобы избежать или UnicodeEncodeError исключения из-за и на следуйте по приведённым здесь ссылкам, которые показывают win-unicode-console (), LC_* (locale), PYTHONIOENCODING решения. заставляют Питон использовать utf-8 в большем числе случаев, делая проблемы с кодировками ввода/вывода гораздо менее вероятными по умолчанию.

print() это удобный wrapper вокруг sys.stdout.write(). input() часто можно рассматривать как wrapper вокруг sys.stdin.readline(), рассчитанный на интерактивный ввод (поддержка истории ввода, редактирования с помощью модуля, если доступен). Для продвинутой поддержки интерактивного ввода в терминале, посмотрите на :

#!/usr/bin/env pythonfrom prompt_toolkit import prompt # $ pip install prompt_toolkitif __name__ == '__main__':    answer = prompt('Give me some input: ')    print('You said: %s' % answer)

Последние

Похожие