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

use*_*102 26 python curses

我试图让一个简单的curses脚本使用Python运行(使用PyCharm 2.0).

这是我的脚本:

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()
Run Code Online (Sandbox Code Playgroud)

当我从我的IDE(PyCharm 2)运行它时,我收到以下错误:


_curses.error: setupterm: could not find terminal
Process finished with exit code 1

如果我从bash运行脚本,它将只是停留在while循环中,而不是按p或q作出反应.

任何帮助,将不胜感激.

小智 25

你必须设置环境变量TERMTERMINFO,就像这样:

export TERM=linux
export TERMINFO=/etc/terminfo
Run Code Online (Sandbox Code Playgroud)

并且,如果您的设备没有此dir(/etc/terminfo),请创建它,并复制terminfo数据库.

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


Tri*_*yen 13

转到运行/调试配置(Pycharm运行按钮旁边的那个).坚持输出控制台中的模拟终端.然后,您将能够使用运行按钮运行程序.


rui*_*rui 1

我在搜索示例时发现了这个问题,因为我也在学习使用curses,所以我对此不太了解。我知道这有效:

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()
Run Code Online (Sandbox Code Playgroud)

我还添加了 try:finally: 以确保即使循环内出现简单的问题,我也能将终端恢复到其原始外观。

您必须使用 addstr 来确保文本将显示在窗口内。