Module (26%)
Section (75%)

Открытие потока в первый раз

Представьте, что мы хотим разработать программу, которая читает содержимое текстового файла с именем: C:\Users\Пользователь\Desktop\file.txt.

Как открыть этот файл для чтения? Вот соответствующий фрагмент кода:

try: stream = open("C:\Users\User\Desktop\file.txt", "rt") # Processing goes here. stream.close() except Exception as exc: print("Cannot open the file:", exc)

Что здесь происходит?

  • мы открываем блок try-except, поскольку хотим мягко обрабатывать ошибки выполнения;
  • мы используем функцию open(), чтобы попытаться открыть указанный файл (обратите внимание, как мы указали имя файла);
  • открытый режим определяется как текст для чтения (так как текст является настройкой по умолчанию, мы можем пропустить t в строке режима);
  • в случае успеха мы получаем объект из функции open() и присваиваем его переменной потока;
  • если open() не удается, мы обрабатываем исключение, выводя полную информацию об ошибке (определенно полезно знать, что именно произошло).

Предварительно открытые потоки

Ранее мы говорили, что любой потоковой операции должен предшествовать вызов функции open(). Есть три четко определенных исключения из правила.

Когда наша программа запускается, три потока уже открыты и не требуют дополнительной подготовки. Более того, ваша программа может использовать эти потоки явно, если вы позаботитесь об импорте модуля sys:

import sys

потому что там размещены декларации этих трех потоков.




Названия этих потоков: sys.stdin, sys.stdout, and sys.stderr.

Давайте проанализируем:

  • sys.stdin
    • stdin (как стандартный ввод);
    • поток stdin обычно связан с клавиатурой, предварительно открыт для чтения и рассматривается как основной источник данных для работающих программ;
    • широко известная функция input() считывает данные из stdin по умолчанию.

  • sys.stdout
    • stdout (как стандартный вывод );
    • поток stdout обычно связан с экраном, предварительно открытым для записи, рассматриваемым как основная цель для вывода данных запущенной программой;
    • хорошо известная функция print() выводит данные в поток stdout.

  • sys.stderr
    • stderr (как стандартный вывод ошибок);
    • поток stderr обычно связан с экраном, предварительно открытым для записи, который рассматривается как основное место, куда работающая программа должна отправлять информацию об ошибках, возникших в ходе ее работы;
    • мы не представили какой-либо метод отправки данных в этот поток (мы обещаем, что скоро это будет сделано);
    • отделение stdout (полезные результаты, полученные по программе) от STDERR (сообщения об ошибках, несомненно, полезно, но не дает результатов) дает возможность перенаправлять эти два типа информации для разных целей. Более подробное обсуждение этого вопроса выходит за рамки нашего курса. Руководство по операционной системе предоставит больше информации по этим вопросам.