2007/11/9, Guido van Rossum <[EMAIL PROTECTED]>:

> Well, passing '1' as the buffer size to open() is supposed to set the
> buffer size to the default value (typically 8K) *and* set a special
> flag that forces a flush() whenever a line end is written.

As for now I can't even imagine how to implement the latter in Lib/io.py.
If anyone would like to do that or give me some advice on how to do that - that
would be great.
Anyway, isn't it easier to set the buffer size in Lib/io.py to
DEFAULT_BUFFER_SIZE whenever open() is passing '1' as the buffer size?
I mean changing these lines in Lib/io.py's open():
---[Lib/io.py:145-146]---
if buffering < 0 and raw.isatty():
   buffering = 1
------
into:
------
if buffering < 0 and raw.isatty():
   buffering = DEFAULT_BUFFER_SIZE
-------
...and then we can implement flush() whenever a line end is written (I
mean that print()s end parameter is set and is not empty string) in
builtin_print(). Code below is not a proposition for a patch. It is
rather proof of concept ;-)
---[Python/bltinmodule.c:1225]---
        if (end == NULL || end == Py_None)
                err = PyFile_WriteString("\n", file);
        else {
                err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
                                  if(PyObject_Length(end) > 0) {
                     if(Py_InteractiveFlag) {
                                              err =
PyFile_WriteString("\n", file);
                     }
                     else {
                         tmp = PyObject_CallMethod(file, "flush", "");
                         if (tmp == NULL)
                        PyErr_Clear();
                         else
                        Py_DECREF(tmp);
                     }
                 }
        }
------------

To make it work I had to change Python/pythonrun.c to make sure that
it sets Py_InteractiveFlag when python works in interactive mode. I
have added that line:

Py_InteractiveFlag = 1;

to PyRun_InteractiveLoopFlags(). I find it arguable if this is the
best place ;-)

Regards,
Wojtek Walczak
_______________________________________________
Python-3000 mailing list
Python-3000@python.org
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe: 
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com

Reply via email to