[Python-bugs-list] [ python-Bugs-633480 ] IOError w/ large string to CMD shell

noreply@sourceforge.net noreply@sourceforge.net
Tue, 05 Nov 2002 05:29:02 -0800


Bugs item #633480, was opened at 2002-11-04 16:06
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=633480&group_id=5470

Category: Windows
Group: Python 2.2.1
Status: Open
Resolution: None
Priority: 4
Submitted By: Michael McCandless (mikemccand)
Assigned to: Nobody/Anonymous (nobody)
Summary: IOError w/ large string to CMD shell

Initial Comment:

If I try to run this program with "python2.2.1 -u":

  # 61409 works!!
  print ' ' * 61410

(which tries to print a string of 61,410 space characters), 
I get this Traceback on Windows 2000 SP2:

  Traceback (most recent call last):
    File "write.py", line 4, in ?
      print ' ' * 61410
  IOError: [Errno 12] Not enough space

Without "-u", this runs fine, and if I change "print" 
to "import sys; sys.stdout.write" instead, it still fails.

I think this is happening in Objects/fileobject.c -- the 
calls to fwrite apparently don't write all bytes in win32 
when the number of bytes is large -- seems like it may 
be necessary to parcel the data up into smaller pieces 
or something?

NOTE: it's possible that the exact length of the string 
that fails may be larger on other OS's...

----------------------------------------------------------------------

>Comment By: Michael McCandless (mikemccand)
Date: 2002-11-05 08:29

Message:
Logged In: YES 
user_id=323786

Thanks for looking into this Tim...

True, we can workaround it -- either don't run UNBUFFERED, 
or break up the strings before printing (override sys.stdout w/ 
our own file object that tries to break things up before 
printing), or don't run under "CMD" or other platform-specific 
shells that have this issue.

But it's rather unexpected and to a "Python newbie" would 
be "surprising"; though I suppose most would not run with "-
u".

Also, from the IOError that's raised I don't know how many 
bytes were actually successfully written (apparently 0 in this 
case).

NOTE: I'm able to reproduce on Windows XP Professional 
(no SP), running "cmd.exe", Python 2.2.2.  I've also tried 
changing the "screen buffer" sizes on the CMD and it does 
not seem to change things.

----------------------------------------------------------------------

Comment By: Tim Peters (tim_one)
Date: 2002-11-04 16:34

Message:
Logged In: YES 
user_id=31435

Couldn't reproduce under Win98SE and 2.2.2 even 
boosting the size to a million.  It *may* have to do with 
console-size settings under cmd.exe.

Reduced the priority.  "So don't do that" comes to mind 
<wink>.  Seriously, if the platform C fwrite chokes, it's not 
Python's job to fix it -- it's Microsoft's.  The interpreter isn't 
dying here, it's raising a well-behaved exception, just 
passing on the error the platform fwrite() raised.  To me it's 
the same as the system malloc complaining that you don't 
have enough memory to satisfy a request:  you've 
exceeded a platform limitation.  If this is important to you, 
you can presumably fix it yourself by chunking up your 
writes in a loop.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=633480&group_id=5470