这是我最近的两个问题的组合:
[1] C 中的 Python 实例方法
[2]如何在 Python 中重定向 stderr?
我想从 python 脚本记录 stdout 和 stderr 的输出。
我想问的是,根据 [1] 创建一个新类型似乎相当复杂。如果不需要将新类型暴露给 Python,它是否简化了事情,即它只存在于 C 中?
我的意思是,当 Python 打印某些内容时,它会转到“Objects/fileobject.c”,然后在“PyFile_WriteObject”中检查是否可以写入其参数:
writer = PyObject_GetAttrString(f, "write");
if (writer == NULL)
...
此外,可以像这样获得 stdout 和 stderr :
PyObject* out = PySys_GetObject("stdout");
PyObject* err = PySys_GetObject("stderr");
那么我的问题是,是否有可能构建满足上述'PyObject_GetAttrString(f,“write”)'并且可以调用的必要PyObject,以便我可以编写:
PySys_SetObject("stdout", <my writer object / class / type / ?>);
http://docs.python.org/c-api/sys.html?highlight=pysys_setobject#PySys_SetObject
这样,就不需要将新的“编写器类型”暴露给 Python 脚本的其余部分,所以我认为编写代码可能会更简单一些......?