#python #python_3x #потоки_данных
В задаче (кроме самого алгоритма решения) необходимо реализовать прием данных через stdin, а вывод через stdout. До этого обычно реализовывал прием через input, а вывод через print или просто возвращал значение без печати через return. Как принять данные с помощью stdin/stdout не улавливаю. Огромная просьба, дать ссылку или пример кода, чтобы разобраться.
Ответы
Ответ 1
По умолчанию input() читает данные из stdin, print() печатает данные в stdout. Так что можете считать вашу задачу решённой. В Питоне stdin, stdout представлены sys.stdin, sys.stdout объектами (текстовые потоки, как правило), которые в общем случае могут быть любого типа (если их интерфейс достаточно file-like) и могут быть переопределены кем-угодно (IDLE, bpython, ipython, IDE, win-unicode-console, etc). Иногда достаточно предоставить объект, который поддерживает единственный метод .write(), если нужно только print() функцию поддерживать. В других случаях, даже экземпляр io.TextIOWrapper (тип sys.stdin/sys.stdout по умолчанию) может быть недостаточным, если .fileno() не возвращает настоящий file descriptor (см. детали в Redirect stdout to a file in Python?). При запуске Питона, 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 python3 import sys for line in sys.stdin: print(line.rstrip('\n')[::-1]) Кодировка, используемая sys.stdin/sys.stdout, чтобы текст в байты превратить и обратно, может зависеть от окружения. Чтобы избежать кракозяб или UnicodeEncodeError исключения из-за работы с произвольными Unicode символами в Windows консоль и на других платформах следуйте по приведённым здесь ссылкам, которые показывают win-unicode-console (PEP 528 возможно упразднит этот пакет), LC_* (locale), PYTHONIOENCODING решения. print() это удобный wrapper вокруг sys.stdout.write(). input() часто можно рассматривать как wrapper вокруг sys.stdin.readline(), рассчитанный на интерактивный ввод (поддержка истории ввода, редактирования с помощью readline модуля, если доступен). Для продвинутой поддержки интерактивного ввода в терминале, посмотрите на prompt_toolkit: #!/usr/bin/env python from prompt_toolkit import prompt # $ pip install prompt_toolkit if __name__ == '__main__': answer = prompt('Give me some input: ') print('You said: %s' % answer)Ответ 2
stdin и stdout это файлоподобные объекты, предоставляемые OS. Для чтения и записи в них нужно импортнуть sys - import sys. sys.stdin.read() использовать для чтения из stdin для записи в stdout можно использовать print(он так и используется - самый распространенный метод записи в stdout). т.е. print пишет в sys.stdout. Пример: import sys str = sys.stdin.read() print str
Комментариев нет:
Отправить комментарий