" Up Arrow" OS X上的Python历史和code.InteractiveConsole

时间:2016-04-17 12:42:01

标签: python macos readline read-eval-print-loop

我在我的一些Python脚本中使用以下技巧进入交互式Python REPL会话:

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

这通常适用于工作中的各种RHEL机器,但在我的笔记本电脑(OS X 10.11.4)上启动REPL似乎没有readline支持。你可以看到我得到了^[[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

如果我直接调用python,则REPL中的向上箭头命令历史记录可以正常工作。

我尝试检查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'

2 个答案:

答案 0 :(得分:3)

只需import readline,无论是在脚本中还是在控制台上。

答案 1 :(得分:0)

程序rlwrap通常解决了这个问题,不仅适用于Python,还适用于需要此功能的其他程序,例如telnet。如果你有Homebrew(你应该),可以用brew install rlwrap安装它,然后通过在命令的开头插入它来使用它,即rlwrap python repl.py