Подтвердить что ты не робот

Понимание stdin stdout stderr

Я пытаюсь понять stdin stdout и stderr.

Я вижу, что они всегда используются в коде людей, и я не могу точно понять, что они собой представляют. Я предполагаю, что они имеют какое-то отношение к вводу/выводу, но ищут объяснения в Интернете и не могут их найти. Кто-нибудь знает о хорошей связи с объяснением или если это достаточно просто, чтобы объяснить, это будет большой помощью для меня.

Поскольку я изучаю Python 3, примеры в этом будут полезны.

4b9b3361

Ответ 1

sys.stdin
sys.stdout
sys.stderr

Файловые объекты, используемые интерпретатором для стандартного ввода, вывода и ошибок:

  • stdin используется для всех интерактивных входов (включая вызовы input());

  • stdout используется для вывода print() и операторов выражения и для приглашений input();

  • Собственные подсказки интерпретаторов и сообщения об ошибках отправляются на stderr.

Для вашего понимания:

>>> import sys
>>> for i in (sys.stdin, sys.stdout, sys.stderr):
...     print i
... 
<open file '<stdin>', mode 'r' at 0x103451150>
<open file '<stdout>', mode 'w' at 0x1034511e0>
<open file '<stderr>', mode 'w' at 0x103451270>

mode r означает чтение и режим w означает запись

Ответ 2

Может ли это объяснить это достаточно хорошо?

sys.stdin
sys.stdout
sys.stderr
Файловые объекты, соответствующие стандартным входным, выходным и потоковым сообщениям интерпретаторов.

stdin используется для ввода всех интерпретаторов, кроме сценариев, но включает вызовы input() и raw_input().

stdout используется для вывода операторов печати и выражения и для запросов ввода() и raw_input().

У интерпретаторов собственные запросы и (почти все) сообщения об ошибках отправляются в stderr.
stdout и stderr не должны быть встроенными файловыми объектами: любой объект является допустимым, если он имеет метод write(), который принимает строковый аргумент.
(Изменение этих объектов не влияет на стандартные потоки ввода-вывода процессов, выполняемых os.popen(), os.system() или семейством функций exec *() в модуле os.)

Подтвердить

если я скажу оболочке python выполнить печать:

print 'what is your name?'

"как ваше имя" пойдет на stdout, что бы это ни было. Если вы не сделали никаких переадресаций, которые по умолчанию используют терминал. Вы можете взаимодействовать со стандартными потоками различными способами, например:

sys.stdout.flush()

Сообщает оболочке python, чтобы заставить любую буферизованную информацию, что я print ed, перейти к stdout сразу.