我正在尝试使用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做出反应。
任何帮助都将不胜感激。
答案 0 :(得分:23)
您必须设置环境变量TERM
和TERMINFO
,如下所示:
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