在Ubuntu中实现python按tab

发布时间:2019-08-26 07:20:06编辑:auto阅读(1633)

        刚学习python,其实一切都很好接受,因为有过C语言的基础,感觉一切都来得那么自然,python极其精简的语法,让我真心是爱上这种语言!相信往后python一定会在我的IT生涯中大放光彩!

        好,废话说完了,入正题。


    1.问题引出:默认情况下python交互界面的tab键    

        在linux下,或在路由器、交换机上,按tab键按得很爽,什么不完整的,tab一下都出来了,无奈,在linux中安装的python,默认情况是没有tab功能的,也就是在python的交互界面中,tab是没有办法补全的,python的交互界面只是把它当作正常的多个空格补全来处理:

    xpleaf@py:~/seminar6/day1$ python
    Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys  
    >>> sys.     =====>按tab键,想看看sys的子模块,结果就是按出了一大堆空格键

    是啊,这也太恶心了!没有tab键,宝宝不开心!


    2.解决方案:自行导入tab键的模块--创建tab.py模块文件

        问题是,没有tab键的模块,怎么办?百度一下吧!不过当时确实找了好多,都找不到一个在我自己的实验环境中可以使用的,总是提示各种错误!还好,总算让我找到一个可以使用的,下面直接给出tab.py的代码:

    #!/usr/bin/env python
    # python startup file 
    import sys
    import readline
    import rlcompleter
    import atexit
    import os
    # tab completion 
    readline.parse_and_bind('tab: complete')
    # history file 
    histfile = os.path.join(os.environ['HOME'], '.pythonhistory')
    try:
        readline.read_history_file(histfile)
    except IOError:
        pass
    atexit.register(readline.write_history_file, histfile)
    del os, histfile, readline, rlcompleter

    把上面的代码,保存成tab.py文件,然后保存到下面的指定路径之一:

    >>> import sys
    >>> sys.path
    ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/ubuntuone-client', '/usr/lib/python2.7/dist-packages/ubuntuone-control-panel', '/usr/lib/python2.7/dist-packages/ubuntuone-couch', '/usr/lib/python2.7/dist-packages/ubuntuone-installer', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']

    为了省事点,我直接把tab.py文件放到/usr/lib/python2.7这个目录下面好了:

    xpleaf@py:~/seminar6/day1$ sudo mv tab.py /usr/lib/python2.7/
    xpleaf@py:~/seminar6/day1$ ll /usr/lib/python2.7/tab.py
    -rw-rw-r-- 1 xpleaf xpleaf 419  8月  6 23:53 /usr/lib/python2.7/tab.py

    3.方案测试:导入tab模块后,可使用tab键补全

    下面就可以爽爽地使用tab键补全了,不过还是要先在python的交互界面中导入一下:

    xpleaf@py:~/seminar6/day1$ python
    Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys    ===>导入sys模块只是为了下面对tab键补全做测试
    >>> import tab    ===>这才是重点
    >>> sys.          ===>输入sys.后按两次tab键
    sys.__class__(              sys.exit(
    sys.__delattr__(            sys.exitfunc(
    sys.__dict__                sys.flags
    sys.__displayhook__(        sys.float_info
    sys.__doc__                 sys.float_repr_style
    sys.__excepthook__(         sys.getcheckinterval(
    sys.__format__(             sys.getdefaultencoding(
    sys.__getattribute__(       sys.getdlopenflags(
    sys.__hash__(               sys.getfilesystemencoding(
    sys.__init__(               sys.getprofile(
    sys.__name__                sys.getrecursionlimit(
    sys.__new__(                sys.getrefcount(
    sys.__package__             sys.getsizeof(
    sys.__reduce__(             sys.gettrace(
    sys.__reduce_ex__(          sys.hexversion
    sys.__repr__(               sys.long_info
    sys.__setattr__(            sys.maxint
    sys.__sizeof__(             sys.maxsize
    sys.__stderr__              sys.maxunicode
    sys.__stdin__               sys.meta_path
    sys.__stdout__              sys.modules
    sys.__str__(                sys.path
    sys.__subclasshook__(       sys.path_hooks
    sys._clear_type_cache(      sys.path_importer_cache
    sys._current_frames(        sys.platform
    sys._getframe(              sys.prefix
    sys._mercurial              sys.ps1
    sys.api_version             sys.ps2
    sys.argv                    sys.py3kwarning
    sys.builtin_module_names    sys.pydebug
    sys.byteorder               sys.setcheckinterval(
    sys.call_tracing(           sys.setdlopenflags(
    sys.callstats(              sys.setprofile(
    sys.copyright               sys.setrecursionlimit(
    sys.displayhook(            sys.settrace(
    sys.dont_write_bytecode     sys.stderr
    sys.exc_clear(              sys.stdin
    sys.exc_info(               sys.stdout
    sys.exc_type                sys.subversion
    sys.excepthook(             sys.version
    sys.exec_prefix             sys.version_info
    sys.executable              sys.warnoptions
    >>> sys.

    感觉好极了!虽然每次进入python的交互界面都要重新再导入一次tab模块,可是有总比没有好!对于我这样的初学者来说,已经很满足啦!

关键字