2017-02-02 3 views
1

Допустим, вам нужно записать двоичные данные в стандартный вывод:Python: sys.stdout.flush() vs. sys.stdout.buffer.flush()?

sys.stdout.buffer.write(data) 

Затем промыть его, вы можете использовать любой из этих двух:

sys.stdout.flush() 
sys.stdout.buffer.flush() 

Оба этих двух вызовов, кажется, работают одинаково в простой ситуации. Однако:

  • первый вызывает поток по всей stdout объекта (_io.TextIOWrapper)

  • второй вызывает поток только на buffer подъобекта (_io.BufferedWriter).

В каких ситуациях вы предпочитаете друг друга?

ответ

1

По существу, разница между TextIOWrapper и BufferedWriter - это то, что они предназначены для обработки. Имея взглянуть на документации Python, вы увидите, что BufferedWriter предназначен для обработки байтовых потоков:

BufferedIOBase сделки с буферизацией на потоке сырых байт (RawIOBase). Его подклассы, BufferedWriter, BufferedReader и BufferedRWPair буферные потоки, которые можно читать, записывать и читать и записывать.

В то время как TextIOWrapper предназначен для обработки байт-потоков, специфичных для текста, таких как кодирование и декодирование.

Другой IOBase подкласс, TextIOBase, имеет дело с потоками, чьи байты представляют собой текст, и обрабатывает кодирование и декодирование с и unicode строк. TextIOWrapper, который расширяет его, представляет собой буферный текстовый интерфейс для буферизованного исходного потока (BufferedIOBase).

Как для вас вы должны наводить флажок. Это мойка, так как TextIOWrapper на самом деле просто красивая обложка для текста BufferedIOBase. Итак, если, как вы говорите, вы фактически обрабатываете двоичные данные, а не текстовые данные, тогда вы можете просто использовать BufferedIOBase.

+0

Можете ли вы привести пример использования 'BufferedIOBase' вместо' sys.stdout.buffer' для получения более полного ответа? (I.e. нужно создать новый объект, какие аргументы и т. Д.) – user7501761

+0

Я думаю, что я ответил на вопрос, который вы задали разумно. Если вы хотите знать, как использовать класс BufferedIOBase, вы всегда можете посмотреть [ресурсы, подобные этим] (http://www.programcreek.com/python/example/26237/io.BufferedIOBase) – loganasherjones

Смежные вопросы