给Python IDLE加上自动补全和历史功能

在编写一些简单的小程序时,一般使用 IDLE 来编写,然而这个模式下不能进行 Tab 补全,不能记忆上一次输入的命令,这样就很尴尬了。所以几经搜索尝试,找到了这样的一个解决方案: 自定义一个 Python 脚本来实现这样的功能

注意:本机的环境为 Windows7 + Python2.7.10

1. 脚本

脚本的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# coding="utf-8"
import readline
import rlcompleter
import atexit
import os
# tab autocomplete
readline.parse_and_bind('tab: complete')
# history file
histfile = os.path.join(os.environ['USERPROFILE'], '.pythonhistory')
try:
readline.read_history_file(histfile)
except IOError:
pass
atexit.register(readline.write_history_file, histfile)
del os, histfile, readline, rlcompleter

把它保存为 tab.py,并把它放到目录 python 安装目录的 Lib\site-packages子目录下即可,如我的目录为D:\program\python2.7.10\Lib\site-packages

  • 重启 IDLE,然后就可以通过 tab 键自动补全了。
  • 在 python command 模式下,需要首先 import tab,然后就可以通过 tab 进行提示了,而且还能通过上下键查看之前输入的命令

2. 可能遇到的问题

以下是我在尝试过程中遇到的问题及解决方法,仅供大家参考。

2.1 readline 错误

在首次尝试时,提示 readline 相关部分出现错误,于是尝试解决,解决方法为: 安装 readline 模块

安装方法以下两种:

  1. easy_install pyreadline
  2. pip install pyreadline

具体可以查看官网:http://pypi.python.org/pypi/pyreadline

2.2 os.environ[‘xxx’] 错误

原始的脚本代码中提供的是 os.environ['HOME'],因为这是针对 Linux 系统的,对 Windows 系统并不适用,在 Windows 中 使用 USERPROFILE 代替 HOME

可以使用 print os.environ 进行查看当前系统中含有哪些值。

1
histfile = os.path.join(os.environ['USERPROFILE'], '.pythonhistory')

这里主要的作用是拼接得到一个存放 history 的文件路径,也可以自定义指定。


[参考文献]