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