2016-04-17 14 views
2

私は対話的なPython REPLセッションにドロップする私のPythonスクリプトの一部で、次のトリックを使用します。Pythonで「上矢印」の歴史OS Xとcode.InteractiveConsole上

import code; code.InteractiveConsole(locals=globals()).interact() 

これは通常、さまざまなに適しています私のラップトップ(OS X 10.11.4)では、READPLをサポートせずにREPLを起動します。私は^[[A^Cガベージ文字を取得することがわかります。

My-MBP:~ complex$ cat repl.py 
a = 'alpha' 
import code; code.InteractiveConsole(locals=globals()).interact() 
b = 'beta' 


My-MBP:~ complex$ python repl.py 
Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
(InteractiveConsole) 
>>> a 
'alpha' 
>>> ^[[A^C 

REPLの矢印コマンド履歴が正常に動作し、最大私は、直接pythonを呼び出す場合。

私はglobals()を調べていくつかの手がかりを探しましたが、どちらの場合も同じように見えます。どのように私はこれを修正することができますか、またはどこを見て上の任意のアイデア?

編集:そして、正しい動作表示するには:

My-MBP:~ complex$ python 
Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 'a' 
'a' 
>>> 'a' 

答えて

0

プログラムrlwrapは、Pythonのためだけでなく、telnetなど、この機能を必要とする他のプログラムのためだけでなく、一般的にこの問題を解決します。 Homebrewを持っている場合はbrew install rlwrapでインストールしてから、それをコマンドの先頭に挿入して使用します(rlwrap python repl.py)。

+0

rlwrapへのポインタを理解してください。しかし、私はHomebrewをインストールしていないので、これを行う予定はありません。どのように、なぜ組み込みの 'python'でこれが動作しないのかを理解したいと思います。 – complex

2

ちょうどimport readline(スクリプトまたはコンソールのいずれか)。

+0

'import readline'を実行すると、本当に矢印コマンドの履歴をあきらめます。それは役に立ちます。しかし、 "裸の" 'python'を実行するときにデッドラインモジュールをインポートする必要はありませんか? – complex

+0

私は分かりません。私はあなたのインストールでそれが問題だとは思わない。 OSX 10.10とUbuntuマシンにsshを実行したときと全く同じ動作をします。 –