1

私は最近、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
4

1 に答える 1

1

この問題には既知の問題があります 8275

問題の原因は次のとおりです。dllをロードした後、GetConsoleScreenBufferInfoは常にゼロを返すため、サイズはNoneを返し、誰もが不満を抱いています。

問題の原因

この問題は、getConsoleScreenBufferinfoを呼び出す直前に、size関数の先頭でself.hout = GetStdHandle(STD_OUTPUT_HANDLE)が再度呼び出された場合に解決されたようです。

この console.pyを使用してください

于 2012-04-25T15:17:53.967 に答える