2012-02-28 16 views
15

Estoy tratando de ejecutar un script de curses simple usando Python (con PyCharm 2.0).Setupterm no pudo encontrar el terminal, en el programa Python usando curses

Esta es mi guión:

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

Cuando ejecuto esto desde mi IDE (PyCharm 2) me sale el siguiente error:

 

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

Si ejecutar la secuencia de fiesta que simplemente se estar atrapado en el ciclo while sin reaccionar ya sea presionando p o q.

Cualquier ayuda sería apreciada.

Respuesta

1

Encontré esta pregunta al buscar ejemplos porque también estoy aprendiendo a usar maldiciones, así que no sé mucho al respecto. Sé que esto funciona sin embargo:

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

También he añadido el intento: por último: para asegurarse de que llegue el terminal a su apariencia original, incluso si algo va mal sencilla dentro del bucle.

Tienes que usar el complemento para asegurarte de que el texto se mostrará dentro de la ventana.

20

Debe establecer variables de entorno TERM y TERMINFO, así:

export TERM=linux 
export TERMINFO=/etc/terminfo 

Y, si el dispositivo no tiene esta dir (/etc/terminfo), que sea, y copiar terminfo base de datos.

Para los terminales "pcansi" "Linux", y se puede descargar la base de datos:

+1

Configuración de TERMINFO para mí resolvió mi problema. – JohnMudd

0

que estaba teniendo el mismo problema. Ver Curses Programming with Python - Starting and ending a curses application.

Hay una función curses.wrapper() que simplifica el proceso de inicio/finalización de una aplicación de curses.

Aquí está el ejemplo del documento Python:

 
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

Ir a correr/configuración de depuración (el uno al lado PyCharm botón de ejecución). Seguir emulando el terminal en la consola de salida. Entonces podrá ejecutar su programa con el botón Ejecutar.

Cuestiones relacionadas