web-dev-qa-db-ja.com

python shellで矢印キーを押したときにエスケープ文字が表示される

インタラクティブなpython Shell)のようなシェルでは、通常、矢印キーを使用して現在の行を移動したり、前のコマンド(上矢印付き)を取得したりできます。

しかし、別のマシンにsshしてpythonを起動すると、次のようなセッションが取得されます。

>>> import os 
>>> ^[[A    

最後のキャラクターは上矢印から来ています。または、左矢印を使用して:

>>> impor^[[D

どうすれば修正できますか?

通常のbashでは、矢印キーは正常に機能します。奇妙な振る舞いは、インタラクティブなpython(またはPerlなど)シェルだけです。

165
Frank

Readlineが有効になっていないようです。 PYTHONSTARTUP変数が定義されているかどうかを確認します。私にとっては、/etc/pythonstartそして、そのファイルは、pythonプロセスによって実行され、インタラクティブになり、readline/history処理をセットアップします。

これに関するドキュメントは、@ chownのおかげです。 http://docs.python.org/2/tutorial/interactive.html

32
ismail

readlineパッケージをインストールすることでこの問題を解決しました。

pip install readline
90
Valerio Crini

OS Xでは、別の問題があります。

System python Shellを使用する場合、キーは問題ありませんが、virtualenvの問題です。virtualenv/ readlineを再インストール/アップグレードしようとしましたが、何も修正されませんでした。

import readline問題ありpythonシェル、次のエラーメッセージが表示されます。

ImportError: dlopen(/Users/raptor/.virtualenvs/bottle/lib/python2.7/lib-dynload/readline.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
Referenced from: /Users/raptor/.virtualenvs/bottle/lib/python2.7/lib-dynload/readline.so
Reason: image not found

原因は/usr/local/opt/readline/lib/libreadline.7.dylib だがしかし libreadline.6.dylibので、シンボルリンクを作成します。

ln -s libreadline.7.dylib libreadline.6.dylib

問題は解決しました!

69
raptor.zh

OS Xでは、Xcodeの更新によりreadlineが壊れることがあります。解決:

brew uninstall readline
brew upgrade python3
brew install readline
pip3 install readline

それでも問題が解決しない場合は、readlineを使用してpipを削除し、easy_installを使用してインストールしてください。

pip3 uninstall readline
easy_install readline
46
Max Malysh

OS Xでは、python 3.5およびvirtualenvを使用

$ pip install gnureadline

インタープリターで以下を実行します。

import gnureadline

これで、矢印キーが正常に機能するはずです。


追加情報...

2015年10月1日現在、readlineは[〜#〜] deprecated [〜#〜](source https:/ /github.com/ludwigschwardt/python-readline

代わりにgnureadlineを使用します(参照: https://github.com/ludwigschwardt/python-gnureadline

python 3.5を使用してgnureadlineの代わりにreadlineをインストールした場合、インタープリターにインポートしようとするとエラーが表示されます。

>>> import readline
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/Users/pi/tmp/python-readline-test/.venv/lib/python3.5/readline.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
  Referenced from: /Users/pi/tmp/python-readline-test/.venv/lib/python3.5/readline.so
  Reason: image not found
22
user12345
  1. readline-develパッケージをインストールします。
  2. recompile python readlineモジュールで
  3. ビンゴ!
15
Eric Wang

以下は、python 3.3。

1)ターミナルを開き、Sudo apt-get install libreadline-dev

2)python 3.3.2のソースファイルを http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tarからダウンロードします.xz

3)展開して、シェルのPython-3.3.2 /ディレクトリに移動します

4)次のコマンドを実行します。

./configure
make
make test
Sudo make install
10
aabhas

Ubuntu 16.04 LTSでPython 3.6.xのシェル履歴(タブ/矢印コマンド))に問題がありました。

Python 3.6.xはソースからインストールされました。

私にとって解決したのは、user12345が言ったように、次のコマンドラインを使用してモジュール「gnureadline」をインストールすることでした。

Sudo pip3.6 install gnureadline

:)

10
Serza

私は最近この問題に遭遇し、_pip install readline_(mac osxでは機能しません)と_pip install gnureadline_について多くのことを読んだ後、満足していません。 python console:

  1. _pip install gnureadline_を使用してgnureadlineをインストールします

これで、_import gnureadline_を実行でき、矢印キーが期待どおりに機能するはずです。それらを自動的に機能させるには、次の手順に従います。

  1. ファイルを作成(または追加)_~/.startup.py_:_import gnureadline_
  2. ファイルに追加_~/.bash_profile_:_export PYTHONSTARTUP=~/.startup.py_

動作しませんが、以前のセットアップで動作したことの1つは、pdb.set_trace()でのgnureadlineの自動インポートです。誰かがこの問題の良い解決策を持っているなら、私はコメントに感謝するでしょう。

9
David Nathan

MacをHigh Sierraにアップグレードした後に影響を受けました。これにより、問題が解決しました。

brew unlink python
xcode-select --install
brew install python
7
Big Perm

CentOSでは、これを修正します

yum install readline-devel

そして、再コンパイルpython 3.4。

OpenSUSEでは、これを修正します

pip3 install readline

valerio Criniの回答に続きます。

おそらく、「pip3 install readline」が一般的なソリューションです。私のCentOSで試したことはありません。

5
peter pan gz

Anaconda Pythonを使用している場合は、次を実行して修正できます。

conda install readline

私のために働いた!

3
Adam Stewart

これを修正するには、次を実行します。

  • yum install readline-devel
  • pip install readline

    • ここで別のエラーが発生しました:

      gcc: readline/libreadline.a: No such file or directory

      gcc: readline/libhistory.a: No such file or directory

      patchをインストールすることでこれを修正しました:

      yum install patch

その後、pip install readlineは、python Shell。

参考までに、RedHatを使用しています

3
juanpaolo

-tパラメーターを指定してsshを呼び出して、sshに仮想端末を割り当てるように指示しましたか?

Manページから:

-t
擬似tty割り当てを強制します。これは、リモートマシンで任意の画面ベースのプログラムを実行するために使用できます。メニューサービスを実装する場合。複数の-tオプションは、sshにローカルttyがない場合でも、ttyの割り当てを強制します。

さらに、別の投稿で提案されているように、サーバーで[〜#〜] term [〜#〜]環境変数を正しく設定する必要がある場合もあります。

2
lothar

Condaを使用している場合、conda-forgeチャネルからreadlineパッケージをインストールすると、問題が修正されます。

conda install -c conda-forge readline=6.2
1
Tomas Ruiz

別のSSHクライアントを使用してみましたか?一部のSSHクライアントには、さまざまなリモートプロセス用の特別な組み込みキーマッピングがあります。私はemacsでこれに何度も遭遇しました。

どのクライアントを使用していますか? PuTTYとSecureCRTの動作を比較することをお勧めします。

1
JoshJordan

Mac OS X Mojave 10.14.6でbrewを介してさまざまな履歴インストールを行った場合、これを次の方法で解決しました。

brew reinstall python2

誰もが異なるインストールシナリオを持っていることを考えれば、魔法の弾丸はおそらくないでしょう。上記も試してみたので、いくつかの答えが組み合わされたのかもしれません。 Brewのデフォルトはpython3そのため、python2パッケージも再インストールする必要があります。

1
mogga

readlineモジュールは廃止され、pythonシェルでquit()またはexit()を実行すると、最新のpythonバージョンで無効なポインターエラーが発生します。代わりにpip install gnureadline

0
Bill Greens

サーバーでキーコードライブラリを実行してみてください。それでもうまくいかない場合は、読み取りキー機能を備えたライブラリをダウンロードしてください。

0
Interesting...

環境変数$ TERMは、[a]うまく動作する場合と[b]動作しない場合をどのように設定しますか?環境設定は、多くの場合、このような問題の鍵です。

0
Alex Martelli

Ubuntu 14.0でPython 2.7をビルドしようとしていました。 libreadline-devが必要になります。ただし、apt-getから取得した場合、現在のバージョンは6.3であり、Python 2.7とは互換性がありません(Python 3についてはわかりません)。たとえば、readlineの以前のバージョンで定義されていたデータ型「Function」および「CPPFunction」は、次のように6.3で削除されました。

https://github.com/yyuu/pyenv/issues/126

つまり、readlineの以前のバージョンのソースコードを取得する必要があるということです。ライブラリのapt-getからlibreadline 5.2をインストールし、ヘッダーファイルの5.2のソースコードを取得しました。それらを/ usr/includeに入れます。

最後に、問題は解決されました。

0
AeroD

OS Xでは、これは私のために働いた:

xcode-select --install  # install xcode command line tools (if you haven't already)
brew reinstall python3  # reinstall python3 (perhaps not necessary)
pip3 install gnureadline  # pip install the gnureadline package
0
Derek Soike