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

时间:2012-02-28 16:23:46

标签: python curses

我正在尝试使用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()

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


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

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

任何帮助都将不胜感激。

6 个答案:

答案 0 :(得分:23)

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

export TERM=linux
export TERMINFO=/etc/terminfo

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

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

答案 1 :(得分:10)

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

答案 2 :(得分: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()

我还添加了try:finally:确保我将终端设置为原始外观,即使循环内部出现简单错误。

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

答案 3 :(得分:0)

我遇到了同样的问题。见Curses Programming with Python - Starting and ending a curses application

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

以下是Python doc中的示例:

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)

答案 4 :(得分:0)

如果您使用macOS并运行PyCharm,则必须从IDE本身设置环境变量以实现执行范围。

  

编辑配置->环境变量

然后添加以下名称/值对

  

TERM Linux

     

TERMINFO / etc / zsh

以上等同于从控制台中导出环境变量,其操作如下

$ export TERM=linux
$ export TERMINFO=/bin/zsh

TERM的默认值为xterm,其他值为[konsole,rxvt] 例如,rxvt通常支持16种颜色。您可以尝试将TERM设置为rxvt-16color。

/ bin / zsh是我在Mac中使用的终端应用程序的路径。

这就像告诉您的程序一样,您将要登录linux(TERM)终端,该终端可以在/ bin / zsh中找到。对于使用bash shell,它可能类似于/ bin / bash。

答案 5 :(得分:0)

如果您使用空闲,则会看到此错误。这是由于Idle的默认输入/输出重定向。尝试从命令行运行程序。 python3 <filename>.py