Setupterm не смог найти терминал, в программе Python, используя проклятия

Я пытаюсь получить простые проклятия script для запуска с использованием Python (с PyCharm 2.0).

Это мой script:

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

Если я запустил script из bash, он просто застрял бы в цикле while, не реагируя на нажатие p или q.

Любая помощь будет оценена.

Ответы

Ответ 1

Вы должны установить переменные окружения TERM и TERMINFO, например:

export TERM=linux
export TERMINFO=/etc/terminfo

И если у вас нет этого каталога (/etc/terminfo), сделайте это и скопируйте базу данных terminfo.

Для терминалов "linux" и "pcansi" вы можете загрузить базу данных:

Ответ 2

Перейдите в конфигурацию запуска/отладки (рядом с кнопкой запуска Pycharm). Наложение на эмуляцию терминала в выходной консоли. Затем вы сможете запустить свою программу с помощью кнопки запуска.

Ответ 3

Я нашел этот вопрос при поиске примеров, потому что я также научился использовать проклятия, поэтому я мало знаю об этом. Я знаю, что это работает, хотя:

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, чтобы убедиться, что текст будет отображаться внутри окна.

Ответ 4

У меня была такая же проблема. См. Программирование Curses с помощью Python - запуск и завершение приложения curses.

Здесь есть функция curses.wrapper(), которая упрощает процесс запуска/завершения приложения curses.

Вот пример из документа 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)

Ответ 5

Если вы используете macOS и запускаете PyCharm, вам придется установить переменные среды из самой IDE для области выполнения.

Изменить конфигурации → Переменные среды

затем добавьте приведенные ниже пары имя-значение

СРОК 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 это может быть что-то вроде /bin/bash.

Ответ 6

Вы увидите эту ошибку, если вы используете Idle. Это из-за простоя по умолчанию перенаправление ввода/вывода. Попробуйте запустить вашу программу из командной строки. python3 <filename>.py