栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Python中重定向stderr?通过Python C API吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Python中重定向stderr?通过Python C API吗?

只需创建一个模块对象(如果正在使用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======>>>

…发射到标准输出的任何字符串都

==
在其周围带有符号(并且
print
调用
.write
两次:使用
'ciao'
,然后使用换行符再次)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/455898.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号