2012-02-28 40 views
15

Tôi đang cố gắng để có được một đoạn script đơn giản để chạy bằng Python (với PyCharm 2.0).Setupterm không thể tìm thấy thiết bị đầu cuối, trong chương trình Python sử dụng các lời nguyền

Đây là kịch bản của tôi:

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

Khi tôi chạy từ IDE của tôi (PyCharm 2) Tôi nhận được lỗi sau:

 

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

Nếu tôi chạy kịch bản từ bash nó sẽ đơn giản bị kẹt trong vòng lặp while không phản ứng với việc nhấn p hoặc q.

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

1

Tôi tìm thấy câu hỏi này khi tìm kiếm các ví dụ vì tôi cũng đang học cách sử dụng các lời nguyền nên tôi không biết nhiều về nó. Tôi biết điều này mặc dù:

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

Tôi cũng đã thêm các thử: cuối cùng: để chắc chắn rằng tôi có được thiết bị đầu cuối với nó là sự xuất hiện ban đầu thậm chí nếu một cái gì đó đơn giản đi sai bên trong vòng lặp.

Bạn phải sử dụng phần bổ sung để đảm bảo văn bản sẽ được hiển thị bên trong cửa sổ.

20

Bạn phải thiết lập các biến môi trường TERMTERMINFO, như thế này:

export TERM=linux 
export TERMINFO=/etc/terminfo 

Và, nếu bạn thiết bị không có dir này (/etc/terminfo), làm cho nó, và sao chép terminfo cơ sở dữ liệu.

Đối với "linux", và "pcansi" thiết bị đầu cuối, bạn có thể tải về cơ sở dữ liệu:

+1

Đặt TERMINFO để tôi giải quyết được sự cố của mình. – JohnMudd

0

Tôi đã có cùng một vấn đề. Xem Curses Programming with Python - Starting and ending a curses application.

Có chức năng curses.wrapper() giúp đơn giản hóa quá trình bắt đầu/kết thúc ứng dụng lời nguyền.

Dưới đây là ví dụ từ 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 để chạy/cấu hình debug (một trong những bên cạnh Pycharm nút chạy). Gắn bó trên thiết bị đầu cuối mô phỏng trong bảng điều khiển đầu ra. Sau đó, bạn sẽ có thể chạy chương trình của bạn với nút chạy.

Các vấn đề liên quan