只需创建一个模块对象(如果正在使用C API,就可以这样做!)并使其具有合适的
write功能-
该模块对象将适合作为第二个参数
PySys_SetObject。
在我向您指出的另一个问题的答案中,我指向
xxmodule.c了Python的C源代码中的一个示例文件,该文件包含许多示例,其中包括各种类型和函数的模块-
即使您(对我来说是神秘的),您也可以从那里工作您认为“制作新类型”部分太困难了;-)。
编辑 :这是一个简单的工作示例(
aview.py):
#include "Python.h"#include <stdio.h>static PyObject *aview_write(PyObject *self, PyObject *args){ const char *what; if (!PyArg_ParseTuple(args, "s", &what)) return NULL; printf("==%s==", what); return Py_BuildValue("");}static PyMethodDef a_methods[] = { {"write", aview_write, METH_VARARGS, "Write something."}, {NULL, NULL, 0, NULL}};PyMODINIT_FUNCinitaview(void){ PyObject *m = Py_InitModule("aview", a_methods); if (m == NULL) return; PySys_SetObject("stdout", m);}aview正确安装此模块后:
$ pythonPython 2.5.4 (r254:67917, Dec 23 2008, 14:57:27) [GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> import aview>>> print 'ciao'==ciao======>>>
…发射到标准输出的任何字符串都
==在其周围带有符号(并且
.write两次:使用
'ciao',然后使用换行符再次)。



