In that case, it looks like you won't be able to get what you want
without modifying CPython.  PRINT_ITEM calls PyFile_SoftSpace,
PyFile_WriteString, and PyFile_WriteObject, which all use
PyFile_Check().  It might be as simple as changing these to
PyFile_CheckExact() calls in PyFile_WriteString / PyFile_WriteObject,
but I have no idea whether the test suite still works after this change
is made.  It does make this program work (it prints things from X.write):

class X(file):
    def write(self, s):
        print "X.write", `s`
        return file.write(self, s)

import sys
x = X("/tmp/out.txt", "w")
print >>x, 42

I don't care to be the champion of this patch, or to submit it to
sourceforge; I suspect there should be a better review of PyFile_Check
vs PyFile_CheckExact uses in fileobject.c, instead of just picking the
few spots that make this usage work.  Before being submitted as a patch,
a testcase should be added too.  Feel free to run with this if you feel
strongly about it.

Jeff

Index: Objects/fileobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v
retrieving revision 2.193
diff -u -u -r2.193 fileobject.c
--- Objects/fileobject.c        7 Nov 2004 14:15:28 -0000       2.193
+++ Objects/fileobject.c        20 Apr 2005 02:41:32 -0000
@@ -2012,7 +2012,7 @@
                PyErr_SetString(PyExc_TypeError, "writeobject with NULL file");
                return -1;
        }
-       else if (PyFile_Check(f)) {
+       else if (PyFile_CheckExact(f)) {
                FILE *fp = PyFile_AsFile(f);
 #ifdef Py_USING_UNICODE
                PyObject *enc = ((PyFileObject*)f)->f_encoding;
@@ -2082,7 +2082,7 @@
                                        "null file for PyFile_WriteString");
                return -1;
        }
-       else if (PyFile_Check(f)) {
+       else if (PyFile_CheckExact(f)) {
                FILE *fp = PyFile_AsFile(f);
                if (fp == NULL) {
                        err_closed();

Attachment: pgpnLHNwKqjp4.pgp
Description: PGP signature

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to