c++ - VS2008 中的简单 swig python 示例 - 导入错误 - 内部 (py)readline 错误

标签 c++ python swig

我最近一直在使用 python 学习 swig 的基础知识,并遇到一个奇怪的错误,即在命令窗口中运行 python 时导入模块会返回此错误。

>>> import simpFunc
Readline internal error
Traceback (most recent call last):
  File "D:\Dev\Python\winx64\lib\site-packages\pyreadline\console\console.py", line 671, in hook_wrapper_23
    res = ensure_str(readline_hook(prompt))
  File "D:\Dev\Python\winx64\lib\site-packages\pyreadline\rlmain.py", line 342, in readline
    return self.mode.readline(prompt)
  File "D:\Dev\Python\winx64\lib\site-packages\pyreadline\modes\emacs.py", line 116, in readline
    self._print_prompt()
  File "D:\Dev\Python\winx64\lib\site-packages\pyreadline\rlmain.py", line 298, in _print_prompt
    n = c.write_scrolling(self.prompt, self.prompt_color)
  File "D:\Dev\Python\winx64\lib\site-packages\pyreadline\console\console.py", line 289, in write_scrolling
    w, h = self.size()
TypeError: 'NoneType' object is not iterable

尽管在出现此错误后可以正确使用模块功能,并且在脚本中运行它时完全没有错误。

我想知道是否有人可以阐明这件事。我目前正在使用 Visual Studio 2008 x64 命令提示符来构建和链接它。 Python 版本 2.7.2,Swig 版本 2.0.4

它不仅仅是针对这个特定的例子,我已经尝试了几个都有这个错误的 c 例子。

下面列出了我正在使用的文件。

simpFunc.cpp

#include "simpFunc.h"

void printNum(int aNum) 
{
std::cout << "num is " << aNum << std::endl;
}

simpFunc.h

#include <iostream>

void printNum(int aNum);

simpFunc.i

/* File : simpFunc.i */
%module simpFunc
%{
#include "simpFunc.h"
%}
%include "simpFunc.h"

下面是我用来创建 .pyd 的命令

swig.exe -python -c++ simpFunc.i
cl /c simpFunc.cpp simpFunc_wrap.cxx /I"D:\Dev\Python\winx64\include"
link /dll /out:.\_simpFunc.pyd /LIBPATH:D:\Dev\Python\winx64\libs simpFunc.obj simpFunc_wrap.obj

最佳答案

这有一个已知问题 issue8275

问题的根源是 加载 dll 后,GetConsoleScreenBufferInfo 始终返回零, 所以 size 返回 None,每个人都不高兴。

source of the problem

如果 self.hout = GetStdHandle(STD_OUTPUT_HANDLE) 在调用 GetConsoleScreenBufferinfo 之前在 size 函数的开头再次调用,问题似乎已解决

用这个 console.py

关于c++ - VS2008 中的简单 swig python 示例 - 导入错误 - 内部 (py)readline 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10313765/

相关文章:

python - 如何使用 SWIG 包装在 python 中接收函数指针的 C++ 函数

java - SWIG JAVA 如何用 %interface 和纯虚方法包装 C++ 多重继承

c# - 在 CMake 中使用多个代码生成器

python - Google Depot Tools `gclient runhooks` 失败, "SYSTEMROOT"必须有效

c++ - 从 2 个 16 位有符号字节中获取有符号整数?

c++ - 嵌套在函数中的函数声明的命名空间

c++ - Qt QByteArray 无符号数据类型

c++ - LoadCursorFromFile 返回 NULL。 GetLastError 也为 0

c++ - Google 和 Facebook 使用哪些前端和后端技术?

python - 如何 : workaround of close_fds=True and redirect stdout/stderr on windows