在Python Shell中,"b"字母不能用,怎么回事?
你好,这真是我遇到过的最有趣的错误/冲突。
在Python的命令行里,我无法输入小写字母“b”。一开始我以为键盘下面有什么东西卡住了,但实际上在其他地方输入都没问题。而且 ctrl+b
、shift+b
甚至 capslock b
都能正常工作。
更奇怪的是,当我用 sudo
启动命令行(也就是 sudo python
),小写的“b”就能正常输入了。
我最后一次操作是安装了 pyexiv2(用 aptitude
),在有和没有 sudo 的情况下都能正常导入这个库。我已经把它卸载了,但问题依旧。
到底怎么回事呢?
我使用的是 Ubuntu 10.04 LTS x86
和 Python 2.6.5
。
另外补充一下:
我安装了一个 vim 的修改脚本,这可能是问题所在。
使用这个:
$ git clone https://github.com/sontek/dotfiles.git
$ cd dotfiles
$ ./install.sh vim
这个脚本会启动更多的 git 克隆,所以可能有点难跟上。但它确实做了很多改变,包括终端的外观。
更新:
1) 我甚至无法复制/粘贴“b”这个字符。ctrl+c/v
和 选择&中间点击
都不管用。
2) 当我用 python -E
打开命令行时,之前提到的那个所谓的 vim 脚本
的修改就不见了,b
可以正常输入。当我用 python
或 python -S
打开时,修改依然存在,我就无法输入 b
。
3) 好消息:我已经找到了问题所在,就是那个所谓的 vim 脚本
。我把它的文件夹重命名了,问题就解决了。接下来几个小时我会深入研究到底是什么导致了这个问题,并把详细结果发在这里。
2 个回答
你在 .pythonstartup
文件中有一行代码出了问题,可能是这样的:
readline.parse_and_bind("bind ^I rl_complete") # darwin libedit
这个 .pythonstartup
文件可以解决这个问题...
try:
import readline
except ImportError:
print "Module readline not available."
else:
import rlcompleter
if 'libedit' in readline.__doc__:
readline.parse_and_bind("bind ^I rl_complete")
else:
readline.parse_and_bind("tab: complete")
我觉得你在命令行里使用的 readline 可能出了问题。也许 'b' 这个键被设置成了自动补全的功能。你可以看看你的 PYTHONSTARTUP
变量,看看它指向哪个文件。如果那个文件里有类似 readline.parse_and_bind
的内容……
我猜 'b' 这个键和 'bind' 这个词之间有某种联系,可能有个叫 bind_to_complete
的变量,它被字面理解了(而且只取了第一个字符)。
让我们开始疯狂猜测吧!