PyCharmでcurseプログラムをリモートでデバッグすることは可能ですか? 設定方法は?
私は PyCharm 4.0.8 の指示に従い、これを " EXAMPLE.py
" から " npyscreen-4.8.7
" に追加しました。
import pydevd
pydevd.settrace('localhost', port=8899, stdoutToServer=False, stderrToServer=True)
そして常に " setupterm
" でエラーが発生します:
$ PYTHONPATH=~/bin/pycharm-debug.egg python EXAMPLE.py
Traceback (most recent call last):
File "EXAMPLE.py", line 34, in <module>
App.run()
File "/home/.../npyscreen-4.8.7/npyscreen/apNPSApplication.py", line 30, in run
return npyssafewrapper.wrapper(self.__remove_argument_call_main)
File "/home/.../npyscreen-4.8.7/npyscreen/npyssafewrapper.py", line 41, in wrapper
wrapper_no_fork(call_function)
File "/home/.../npyscreen-4.8.7/npyscreen/npyssafewrapper.py", line 83, in wrapper_no_fork
_SCREEN = curses.initscr()
File "/usr/lib64/python2.6/curses/__init__.py", line 33, in initscr
fd=_sys.__stdout__.fileno())
_curses.error: setupterm: could not find terminal
問題は、pydevd が環境 "TERM" を "xterm" から "emacs" に変更したことです。これは、小さなテスト プログラムで確認できます。
import pydevd
pydevd.settrace('localhost', port=8899, stdoutToServer=False, stderrToServer=True)
import os as _os
import sys as _sys
import curses
print " my term: ", _os.environ.get("TERM", "unknown"), "\n"
print " my fd: ", _sys.__stdout__.fileno(), "\n"
print "\n ok 1 \n"
curses.setupterm(term=_os.environ.get("TERM", "unknown"),
#curses.setupterm(term='xterm',
fd=_sys.__stdout__.fileno())
print "\n ok 2 \n"
- " " の 2 行を削除する
pdevd
と、プログラムは成功します。表示される" "TERM
は "xterm
" です。 - " " への第 1 引数を "
setupterm
" に変更するterm='xterm'
と、"pydevd
" でも成功します。
pydevd
問題は、どのように " " 正しい " " セットアップを行うかということだと思いますTERM
。