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

Simple swig python example in VS2008 - import error - internal (py)readline error

本文关键字:错误 内部 py readline 导入 swig 简单 python 示例 VS2008      更新时间:2023-10-16

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

>>> import simpFunc
Readline internal error
Traceback (most recent call last):
  File "D:DevPythonwinx64libsite-packagespyreadlineconsoleconsole.py", line 671, in hook_wrapper_23
    res = ensure_str(readline_hook(prompt))
  File "D:DevPythonwinx64libsite-packagespyreadlinerlmain.py", line 342, in readline
    return self.mode.readline(prompt)
  File "D:DevPythonwinx64libsite-packagespyreadlinemodesemacs.py", line 116, in readline
    self._print_prompt()
  File "D:DevPythonwinx64libsite-packagespyreadlinerlmain.py", line 298, in _print_prompt
    n = c.write_scrolling(self.prompt, self.prompt_color)
  File "D:DevPythonwinx64libsite-packagespyreadlineconsoleconsole.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 示例,它们都有此错误。

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

辛普芬克.cpp

#include "simpFunc.h"
void printNum(int aNum) 
{
std::cout << "num is " << aNum << std::endl;
}

辛普芬克

#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:DevPythonwinx64include"
link /dll /out:._simpFunc.pyd /LIBPATH:D:DevPythonwinx64libs simpFunc.obj simpFunc_wrap.obj
有一个

已知问题问题8275

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

问题的根源

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

使用这个console.py