curses - 在使用curses的python 程序中,Setupterm找不到终端,

我尝试使用python (使用PyCharm 2.0)来运行一个简单的curses脚本。

这是脚本:


import curses


stdscr = curses.initscr()


curses.noecho()


curses.cbreak()


stdscr.keypad(1)


while 1:


 c = stdscr.getch()


 if c == ord('p'): print("I pressed p")


 elif c == ord('q'): break



curses.nocbreak(); stdscr.keypad(0); curses.echo()


curses.endwin()



当我从(PyCharm 2)中运行此命令时,会出现以下错误:





_curses.error: setupterm: could not find terminal


Process finished with exit code 1



如果我从bash运行脚本,它停留在while循环中,而不会对按p或q做出反应。

时间:

你必须设置环境变量TERMTERMINFO,如下所示:


export TERM=linux


export TERMINFO=/etc/terminfo



对于"Linux"和"pcansi"终端,你可以下载数据库:

转到运行/调试配置( 在Pycharm运行按钮旁边的那个) 。 在输出控制台上粘附仿真终端。 然后,你就可以使用运行按钮运行你的程序。


import curses


try:


 stdscr = curses.initscr()


 curses.noecho()


 curses.cbreak()


 stdscr.keypad(1)


 while 1:


 c = stdscr.getch()


 if c == ord('p'):


 stdscr.addstr("I pressed p")


 elif c == ord('q'): break


finally:


 curses.nocbreak(); stdscr.keypad(0); curses.echo()


 curses.endwin()



我也有同样的问题,

有一个curses.wrapper()函数可以简化启动/结束curses应用程序的过程。

下面是python文档中的例子:

from curses import wrapper
def main(stdscr):
 # Clear screen
 stdscr.clear()
 # This raises ZeroDivisionError when i == 10.
 for i in range(0, 11):
 v = i-10
 stdscr.addstr(i, 0, '10 divided by {} is {}'.format(v, 10/v))
 stdscr.refresh()
 stdscr.getkey()
wrapper(main)

...