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

时间:2012-04-25 10:23:57

标签: c++ python swig

我最近一直在学习swig与python的基础知识,并遇到一个奇怪的错误,在命令窗口中运行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

它不仅仅是针对这个具体的例子我或者尝试了几个都有这个错误的例子。

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

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

1 个答案:

答案 0 :(得分:1)

这是一个已知的问题 issue8275

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

source of the problem

如果在调用GetConsoleScreenBufferinfo

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

使用它 console.py