sys.stdout.write не работает должным образом для двоичных файлов в Windows - PullRequest
1 голос
/ 14 февраля 2011

У меня есть скрипт Python, который обрабатывает все входящие запросы и генерирует / возвращает контент в зависимости от типа ввода.

Когда я запускаю свой скрипт Python с

print "Content-Type: text/plain\r\n\r\n" #debug mode

СгенерированныйHTML это то, что я ожидаю.Но когда я комментирую вышеприведенную строку, она обрезает часть вывода.Я генерирую HTML, читая файл и используя sys.stdout.write для записи в вывод.

Кодовые ссылки :

драйвер: http://pastebin.com/VULgJWEx (содержитоператор печати)

Обработчик: http://pastebin.com/j87rrQyx (содержит writeFileToStdout, который выполняет запись в стандартный вывод)

Образец :

с типом содержимого: текст -

Content-Length: 105

Content-Type: application/vnd.apple.mpegurl

#EXTM3U

#EXT-X-TARGETDURATION:10

#EXT-X-MEDIA-SEQUENCE:118394

#EXTINF:5,

20110203T230818-01-118403.ts


без печати:
Content-Length: 105

Content-Type: application/vnd.apple.mpegurl

#EXTM3U

#EXT-X-TARGETDURATION:10

#EXT-X-MEDIA-SEQUENCE:118394

#EXTINF:5,

20110203T230818-01-118403  #(ts is missing!!)

Последняя строка усечена.


Кто-нибудь может понять, почему печатьвызывает это?(или это что-то еще?)

1 Ответ

3 голосов
/ 15 февраля 2011

Не было проблем с печатью или stdout (как и ожидалось).

Я пытался прочитать из двоичного файла (в Windows) и записать его в стандартный вывод. Поскольку модуль 'sys' открывает файловый объект 'stdout' от вашего имени и обычно делает это в текстовом режиме, все шло наперекосяк.

Итак, чтобы решить эту проблему:

msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

Эта ссылка хорошо объясняет проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...