如何在Windows中获取PyErr_Print的输出或将其另存为字符串

彼得

我正在编写嵌入式python解释器,有一个函数PyErr_Print()https://docs.python.org/3/c-api/exceptions.html),该函数写入标准错误文本,解释为什么我调用的C函数失败。

这似乎在Windows上不起作用,因为它从不向终端写入任何内容,是否有办法将其重定向到某个地方,或存储为字符串以便我可以看到?

用户4885118

这是使用boost :: python的解决方案:

#include <ostream>
#include <boost/python.hpp>

std::ostream& operator<<(std::ostream& os, boost::python::error_already_set& e) {
  using namespace boost::python;
  // acquire the Global Interpreter Lock

  PyObject * extype, * value, * traceback;
  PyErr_Fetch(&extype, &value, &traceback);
  if (!extype) return os;

  object o_extype(handle<>(borrowed(extype)));
  object o_value(handle<>(borrowed(value)));
  object o_traceback(handle<>(borrowed(traceback)));

  object mod_traceback = import("traceback");
  object lines = mod_traceback.attr("format_exception")(
    o_extype, o_value, o_traceback);

  for (int i = 0; i < len(lines); ++i)
    os << extract<std::string>(lines[i])();

  // PyErr_Fetch clears the error state, uncomment
  // the following line to restore the error state:
  // PyErr_Restore(extype, value, traceback);

  // release the GIL
  return os;
}

像这样使用:

#include <iostream>
#include <boost/python.hpp>

try {
   // some code that raises
catch (boost::python::error_already_set& e) {
   std::cout << e << std::endl; // or stream to somewhere else
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在大量gz /常规文件中查找包含某些字符串的日志并将其另存为一个/多个txt文件?

来自分类Dev

如何在大量gz /常规文件中查找包含某些字符串的日志并将其另存为一个/多个txt文件?

来自分类Dev

将字符串另存为JavaScript中的代码

来自分类Dev

如何在C#中将对象另存为字符串

来自分类Dev

如何在Excel中将数字另存为字符串?

来自分类Dev

如何将str()的结果另存为R中的字符串?

来自分类Dev

从UITextField获取用户输入,并在不使用segues的情况下将其另存为ViewController中的字符串

来自分类Dev

如何在领域数据库中将多个图像路径另存为字符串作为一项

来自分类Dev

将AngularJS模板另存为字符串

来自分类Dev

回送日期值另存为字符串

来自分类Dev

在Matlab中将字符串另存为P代码

来自分类Dev

在Firestore JavaScript中将数字另存为字符串

来自分类Dev

将循环结果另存为字符串

来自分类Dev

SerialBT.readString()另存为字符串

来自分类Dev

在Firestore JavaScript中将数字另存为字符串

来自分类Dev

猫鼬-数组另存为字符串

来自分类Dev

无法将日期对象另存为字符串

来自分类Dev

回送日期值另存为字符串

来自分类Dev

如何在 HIVE 中创建 DDL 并将其另存为目录中的文件

来自分类Dev

如何从Pygame中的用户获取输入并将其另存为变量?

来自分类Dev

如何在Java中绘制图形并将其另存为图像

来自分类Dev

保存更改时如何将空字符串另存为string.empty?

来自分类Dev

将字符串另存为结构体中的整数。C

来自分类Dev

使用Python将csv文件中的剥离文本另存为字符串对象

来自分类Dev

将PersianCalendar另存为表中的字符串,而不是DateTime类型

来自分类Dev

将字符串另存为结构体中的整数。C

来自分类Dev

将XML代码另存为PHP中的字符串

来自分类Dev

使用parse.com是否可以转换字符串,以便将其另存为对象浏览器中的指针?

来自分类Dev

使用单词VBA正则表达式提取文本,然后将其另存为字符串形式的变量

Related 相关文章

  1. 1

    如何在大量gz /常规文件中查找包含某些字符串的日志并将其另存为一个/多个txt文件?

  2. 2

    如何在大量gz /常规文件中查找包含某些字符串的日志并将其另存为一个/多个txt文件?

  3. 3

    将字符串另存为JavaScript中的代码

  4. 4

    如何在C#中将对象另存为字符串

  5. 5

    如何在Excel中将数字另存为字符串?

  6. 6

    如何将str()的结果另存为R中的字符串?

  7. 7

    从UITextField获取用户输入,并在不使用segues的情况下将其另存为ViewController中的字符串

  8. 8

    如何在领域数据库中将多个图像路径另存为字符串作为一项

  9. 9

    将AngularJS模板另存为字符串

  10. 10

    回送日期值另存为字符串

  11. 11

    在Matlab中将字符串另存为P代码

  12. 12

    在Firestore JavaScript中将数字另存为字符串

  13. 13

    将循环结果另存为字符串

  14. 14

    SerialBT.readString()另存为字符串

  15. 15

    在Firestore JavaScript中将数字另存为字符串

  16. 16

    猫鼬-数组另存为字符串

  17. 17

    无法将日期对象另存为字符串

  18. 18

    回送日期值另存为字符串

  19. 19

    如何在 HIVE 中创建 DDL 并将其另存为目录中的文件

  20. 20

    如何从Pygame中的用户获取输入并将其另存为变量?

  21. 21

    如何在Java中绘制图形并将其另存为图像

  22. 22

    保存更改时如何将空字符串另存为string.empty?

  23. 23

    将字符串另存为结构体中的整数。C

  24. 24

    使用Python将csv文件中的剥离文本另存为字符串对象

  25. 25

    将PersianCalendar另存为表中的字符串,而不是DateTime类型

  26. 26

    将字符串另存为结构体中的整数。C

  27. 27

    将XML代码另存为PHP中的字符串

  28. 28

    使用parse.com是否可以转换字符串,以便将其另存为对象浏览器中的指针?

  29. 29

    使用单词VBA正则表达式提取文本,然后将其另存为字符串形式的变量

热门标签

归档