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();
pgpnLHNwKqjp4.pgp
Description: PGP signature
-- http://mail.python.org/mailman/listinfo/python-list