When file-like objects aren't file-like enough for Windows

William McBrine wmcbrine at users.sf.net
Sun Mar 16 17:25:56 CET 2008

This is proving to be a recurring problem for me.

First, I used the save() method of a Python Imaging Library "Image" 
object to write directly to the "wfile" of a BaseHTTPRequestHandler- 
derived class:

    pic.save(self.wfile, 'JPEG')

Worked great in Linux, barfed in Windows. I had to do this to get around 

    out = StringIO()
    pic.save(out, 'JPEG')
    encoded = out.getvalue()

Now, I have a similar problem with subprocess.Popen... The code that 
works in Linux looks like this:

    source = urllib.urlopen(url)
    child = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=source)
        shutil.copyfileobj(child.stdout, self.wfile)

But wfile isn't the problem this time; instead, it's the source:

child = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=source)
File "C:\Python25\lib\subprocess.py", line 586, in __init__
errread, errwrite) = self._get_handles(stdin, stdout, stderr)
File "C:\Python25\lib\subprocess.py", line 698, in _get_handles
p2cread = msvcrt.get_osfhandle(stdin.fileno())
IOError: [Errno 9] Bad file descriptor 

How can I get around this, short of resorting to copying all of the input 
before passing it to the child?

09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 -- pass it on

More information about the Python-list mailing list