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

Posted

技术标签:

【中文标题】Setupterm 找不到终端,在 Python 程序中使用 curses【英文标题】:Setupterm could not find terminal, in Python program using curses 【发布时间】:2012-03-18 03:31:13 【问题描述】:

我正在尝试使用 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 没有反应。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

编辑配置 -> 环境变量

然后添加下面的名称-值对

术语 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 。

【讨论】:

【参考方案3】:

转到运行/调试配置(Pycharm 运行按钮旁边的那个)。坚持在输出控制台中的模拟终端上。然后你就可以使用运行按钮来运行你的程序了。

【讨论】:

对我来说就是这样! ?【参考方案4】:

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

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

以下是 Python 文档中的示例:

从诅咒导入包装器 定义主(stdscr): #清屏 stdscr.clear() # 这会在 i == 10 时引发 ZeroDivisionError。 对于范围内的 i (0, 11): v = i-10 stdscr.addstr(i, 0, '10 除以 是 '.format(v, 10/v)) stdscr.refresh() stdscr.getkey() 包装(主要)

【讨论】:

【参考方案5】:

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

export TERM=linux
export TERMINFO=/etc/terminfo

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

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

http://forum.xda-developers.com/attachment.php?attachmentid=2134052&d=1374459598 http://forum.xda-developers.com/showthread.php?t=552287&page=4

【讨论】:

我从 cron 运行脚本时遇到了这个问题,您需要在其中删除每一行的 'export' 以设置 env vars 而不会出现 crontab 抱怨【参考方案6】:

我在搜索示例时发现了这个问题,因为我也在学习使用诅咒,所以我对此了解不多。我知道这是可行的:

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 来确保文本将显示在窗口内。

【讨论】:

以上是关于Setupterm 找不到终端,在 Python 程序中使用 curses的主要内容,如果未能解决你的问题,请参考以下文章

gnome 终端:找不到目录(在另一个终端中运行 python 脚本)

Python 子进程调用返回“找不到命令”,终端正确执行

为啥 setupterm 会终止程序?

环境问题-Pycharm终端terminal找不到(安装或自定义)模块

环境问题—Pycharm终端terminal找不到(安装或自定义)模块

python在mac系统配置PYTHONPATH