2012-02-28 48 views
15

我正在嘗試使用Python(使用PyCharm 2.0)來運行簡單的curses腳本。Setupterm找不到終端,在使用curses的Python程序中

這是我的腳本:

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

我在搜索示例時發現了這個問題,因爲我也在學習使用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() 

我還添加了嘗試:最後:要確保我得到的終端是即使一些簡單的出錯內循環原貌。

您必須使用addstr來確保文本將在窗口內顯示。

20

您必須設置環境變量TERMTERMINFO,像這樣:

export TERM=linux 
export TERMINFO=/etc/terminfo 

而且,如果設備沒有這個目錄(/etc/terminfo),使其和複製terminfo數據庫。

爲 「LINUX」,和 「pcansi」 即可終端,你可以下載數據庫:

+1

爲我設置TERMINFO解決了我的問題。 – JohnMudd 2014-04-13 02:53:58

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) 
1

轉到運行/調試配置(一個挨着Pycharm運行按鈕)。在輸出控制檯上模擬終端。然後,您將能夠使用運行按鈕運行您的程序。