2012-02-28 7 views
15

Próbuję uzyskać prosty skrypt curses do uruchomienia przy użyciu Pythona (z PyCharm 2.0).Setupterm nie mógł znaleźć terminala, w programie Python za pomocą przeklejek

To jest mój skrypt:

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

Kiedy uruchomić ten od mojego IDE (pycharm 2) pojawia się następujący błąd:

 

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

Jeśli uruchomić skrypt z bash to po prostu utknąć w pętli while, nie reagując na naciśnięcie p lub q.

Każda pomoc zostanie doceniona.

Odpowiedz

1

Znalazłem to pytanie podczas wyszukiwania przykładów, ponieważ uczę się również używać przekleństw, więc nie wiem zbyt wiele na ten temat. Wiem, że to działa, choć:

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

Dodałem też try: Na koniec: aby upewnić się dostać do terminalu to oryginalny wygląd, nawet jeśli coś pójdzie nie tak proste wewnątrz pętli.

Musisz użyć narzędzia addstr, aby upewnić się, że tekst będzie wyświetlany w oknie.

20

Musisz ustawić zmienne otoczenie TERM i TERMINFO, tak:

export TERM=linux 
export TERMINFO=/etc/terminfo 

A jeśli urządzenie nie ma tej dir (/etc/terminfo), należy go skopiować i terminfo bazy danych.

Dla "Linux" i zacisków "pcansi" można pobrać bazy danych:

+1

Ustawienie TERMINFO dla mnie rozwiązało mój problem. – JohnMudd

0

miałem ten sam problem. Zobacz Curses Programming with Python - Starting and ending a curses application.

Istnieje funkcja curses.wrapper(), która upraszcza proces uruchamiania/kończenia aplikacji curses.

Oto przykład z doc 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

Go, aby uruchomić/konfiguracji debugowania (jeden obok pycharm uruchomienie przycisku). Trzymanie na emulowanym terminalu w konsoli wyjściowej. Wtedy będziesz mógł uruchomić program za pomocą przycisku Uruchom.

Powiązane problemy