您是如何执行代码的?如果异常没有被python直接捕获和打印(有人直接在python中安装了处理程序),它将被设置为异常处理,然后可以使用C检查异常(参见参考手册中的异常处理部分)。
如果您从 C 代码调用 python 脚本,调用函数将返回 NULL 或 -1(发生异常),现在您可以使用上述 API 读取异常(例如 PyErr_Occurred(),.. .).
但是如果这些事情是由 python 代码本身完成的(如果有人在它的代码中安装了一个钩子或其他东西并直接打印它),你没有任何改变可以轻松地捕捉事情。也许你可以自己添加一个钩子,调用你的代码。这可以通过 sys.excepthook(type, value, traceback) 完成,一种解决方案是找到该位置并将其从代码中删除,或者查看其他方法来规避它。
这个网站信息量很大:Python API/include files
编辑:
要重定向 stdout 或 stderr,您可以使用 C-Api 函数:
FILE* sto = fopen("out.txt", "w+");
FILE* ste = fopen("outErr.txt", "w+");
PySys_SetObject("stdout", PyFile_FromFile(sto, "out.txt","wb", fclose));
PySys_SetObject("stderr", PyFile_FromFile(ste, "outErr.txt","wb", fclose));
在调用任何其他 python 代码之前。我认为 PyFile_FromFile 也可能被其他东西取代,但到目前为止我还没有使用过。