web-dev-qa-db-ja.com

Setuptermは、cursesを使用するPythonプログラムでターミナルを見つけることができませんでした

Python(PyCharm 2.0を使用)を使用して実行する簡単なcursesスクリプトを取得しようとしています。

これは私のスクリプトです:

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

Bashからスクリプトを実行すると、pやqを押しても反応しないwhileループに止まるだけです。

任意の助けいただければ幸いです。

31
user1017102

次のように、環境変数TERMおよびTERMINFOを設定する必要があります。

export TERM=linux
export TERMINFO=/etc/terminfo

また、デバイスにこのディレクトリがない場合(/etc/terminfo)、それを作成し、terminfoデータベースをコピーします。

「linux」および「pcansi」端末の場合、データベースをダウンロードできます。

24
irk_coder

実行/デバッグ構成に移動します(Pycharm実行ボタンの横にあるもの)。出力コンソールで端末をエミュレートし続ける。次に、実行ボタンを使用してプログラムを実行できます。

13
Trieu Nguyen

私はcursesの使い方も学んでいるので、例について検索しているときにこの質問を見つけました。私はこれがうまくいくことを知っています:

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

ループ内で単純な問題が発生した場合でも、ターミナルを元の外観に戻すために、try:finally:を追加しました。

Addstrを使用して、テキストがウィンドウ内に表示されることを確認する必要があります。

1
rui

私も同じ問題を抱えていました。 Python-cursesアプリケーションの開始と終了)を使用したCuresプログラミング を参照してください。

Cursesアプリケーションの開始/終了プロセスを簡略化するcurses.wrapper()関数があります。

Python docの例です:

 from curses import wrapper 
 
 def main(stdscr):
#画面をクリア
 stdscr.clear()
 
#これは、i == 10の場合にZeroDivisionErrorを発生させます。
 for i in range(0、11):
 v = i-10 
 stdscr.addstr(i、0 、'10を{}で割ったものは{} 'です。format(v、10/v))
 
 stdscr.refresh()
 stdscr.getkey()
 
 wrapper(main)
1
Zachary Wilson

MacOSを使用してPyCharmを実行している場合は、実行スコープとしてIDE自体から環境変数を設定する必要があります。

構成の編集->環境変数

次に、以下の名前と値のペアを追加します

TERM Linux

TERMINFO/etc/zsh

上記は、コンソールから環境変数をエクスポートすることと同じです。

$ export TERM=linux
$ export TERMINFO=/bin/zsh

tERMのデフォルトはxtermです。他の値は[konsole、rxvt]です。たとえば、rxvtは、16色をサポートするように構築されることがよくあります。 TERMをrxvt-16colorに設定してみてください。

/ bin/zshは、Macで使用するターミナルアプリケーションのパスです。

これは、/ bin/zshにあるターミナルのようなlinux(TERM)にログインすることをプログラムに伝えるようなものです。 bashシェルを使用する場合は、/ bin/bashのようになります。

0
hassan_ashraf

Idleを使用している場合は、このエラーが表示されます。これは、Idleのデフォルトの入出力リダイレクトによるものです。コマンドラインからプログラムを実行してみてください。 python3 <filename>.py

0
Clarius