Python Cookbook 2Nd Edition Jun 1002005 [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Python Cookbook 2Nd Edition Jun 1002005 [Electronic resources] - نسخه متنی

David Ascher, Alex Martelli, Anna Ravenscroft

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید







Recipe 2.12. Sending Binary Data to Standard Output Under Windows


Credit: Hamish Lawson


Problem



You want to send binary data (e.g., an
image) to stdout under Windows.


Solution


That's what the setmode function,
in the platform-dependent (Windows-only) msvcrt
module in the Python Standard Library, is for:

import sys
if sys.platform == "win32":
import os, msvcrt
msvcrt.setmode(sys.stdout.fileno( ), os.O_BINARY)

You can now
call sys.stdout.write with any bytestring as the
argument, and the bytestring will go unmodified to standard output.


Discussion


While Unix doesn't make (or need) a distinction
between text and binary modes, if you are reading or writing binary
data, such as an image, under Windows, the file must be opened in
binary mode. This is a problem for programs that write binary data to
standard output (as a CGI script, for example, could be expected to
do), because Python opens the sys.stdout file
object on your behalf, normally in text mode.

You can have stdout opened in binary mode instead
by supplying the -u command-line option to the
Python interpreter. For example, if you know your CGI script will be
running under the Apache web server, as the first line of your
script, you can use something like:

#! c:/python23/python.exe -u

assuming you're running under Python 2.3 with a
standard installation. Unfortunately, you may not always be able to
control the command line under which your script will be started. The
approach taken in this recipe's
"Solution" offers a workable
alternative. The setmode function provided by the
Windows-specific msvcrt module lets you change the
mode of stdout's underlying file
descriptor. By using this function, you can ensure from within your
program that sys.stdout gets set to binary mode.


See Also


Documentation for the msvcrt module in the
Library Reference and Python in a
Nutshell
.


/ 394