Pythonの対話コンソールで方向キーが打てないときの対処方法
Pythonの対話コンソールでちょっとコードを試し打ちしようとしたら遭遇した問題についての対処方法を紹介します。
環境
$ python
Python 3.5.6 (default, Sep 28 2019, 10:29:54)
[GCC 7.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
どんな不具合だったのか
対話コンソールで方向キーを入力すると、意図しない文字が入力されました。
具体的には、「メソッド名()」のようにカッコを先に入力して方向キーでカッコ内に戻って入力しようとすると、以下のような文字が。
>>> def index()^[[D
上記は左キー。
- 右: ^[[D
- 上: ^[[A
- 下: ^[[B
のように意図しない文字が入力されてしまう。
対処方法
pipでライブラリを入れることで解決しました。
$ pip install gnureadline
一方、pypi(gnureadline)によると
Please take note that IPython does not depend on gnureadline anymore since version 5.0 as it now uses prompt_toolkit instead.
(IPythonはバージョン5.0以降、代わりにprompt_toolkitを使用するようになったため、gnureadlineに依存しなくなったことに注意してください。)
とのことで古いバージョンにおいてはgnureadlineはすでに依存しなくなったとのことですが、私が立てた仮想環境(python 3.5)のような古いバージョンではこのライブラリを入れることで対話コンソールが無事動きました。
※ ちなみに比較的新しい他のpython(3.7)などで試してみると、このgnureadlineがなくても方向キーは正しく機能しました。
参考:
pypi(gnureadline)
stackoverflow