导入rlcompleter导致终端调整大小失败?

时间:2014-04-21 18:46:43

标签: python python-3.x curses

请考虑以下代码。

import curses
import rlcompleter

def main(stdscr):
    while 1:
        c = stdscr.get_wch()

curses.wrapper(main)

当我运行此程序并调整终端大小时,程序在get_wch失败,说

Traceback (most recent call last):
  File "foo.py", line 8, in <module>
    curses.wrapper(main)
  File "/usr/lib/python3.3/curses/__init__.py", line 94, in wrapper
    return func(stdscr, *args, **kwds)
  File "foo.py", line 6, in main
    c = stdscr.get_wch()
_curses.error: no input

但是,当我删除行import rlcompleter时,会正确返回KEY_RESIZE并且一切正常。

发生了什么事?

1 个答案:

答案 0 :(得分:1)

我刚刚尝试过这个问题,而你是http://bugs.python.org/issue2675的受害者,这更像是一个readline + curses问题,而不是Python问题。

简而言之,curses行为会根据环境变量LINES和COLUMNS而变化,这些变量就是读取集。

如果你添加

import os

os.unsetenv('LINES')
os.unsetenv('COLUMNS')

在那里的某个地方,它将消除冲突并按照您的预期行事。如果你想要慷慨,你可能想要保存/恢复=)。