天天看點

在Ubuntu中實作python按tab鍵補全

 剛學習python,其實一切都很好接受,因為有過c語言的基礎,感覺一切都來得那麼自然,python極其精簡的文法,讓我真心是愛上這種語言!相信往後python一定會在我的it生涯中大放光彩!

    好,廢話說完了,入正題。

1.問題引出:預設情況下python互動界面的tab鍵    

    在linux下,或在路由器、交換機上,按tab鍵按得很爽,什麼不完整的,tab一下都出來了,無奈,在linux中安裝的python,預設情況是沒有tab功能的,也就是在python的互動界面中,tab是沒有辦法補全的,python的互動界面隻是把它當作正常的多個空格補全來處理:

1

2

3

4

5

6

<code>xpleaf@py:~/seminar6/day1$ python</code>

<code>python </code><code>2.7</code><code>.</code><code>3</code> <code>(</code><code>default</code><code>, aug  </code><code>1</code> <code>2012</code><code>, </code><code>05</code><code>:</code><code>14</code><code>:</code><code>39</code><code>) </code>

<code>[gcc </code><code>4.6</code><code>.</code><code>3</code><code>] on linux2</code>

<code>type </code><code>"help"</code><code>, </code><code>"copyright"</code><code>, </code><code>"credits"</code> <code>or </code><code>"license"</code> <code>for</code> <code>more information.</code>

<code>&gt;&gt;&gt; </code><code>import</code> <code>sys  </code>

<code>&gt;&gt;&gt; sys.     =====&gt;按tab鍵,想看看sys的子子產品,結果就是按出了一大堆空格鍵</code>

是啊,這也太惡心了!沒有tab鍵,寶寶不開心!

2.解決方案:自行導入tab鍵的子產品--建立tab.py子產品檔案

    問題是,沒有tab鍵的子產品,怎麼辦?百度一下吧!不過當時确實找了好多,都找不到一個在我自己的實驗環境中可以使用的,總是提示各種錯誤!還好,總算讓我找到一個可以使用的,下面直接給出tab.py的代碼:

7

8

9

10

11

12

13

14

15

16

17

<code>#!/usr/bin/env python</code>

<code># python startup file </code>

<code>import</code> <code>sys</code>

<code>import</code> <code>readline</code>

<code>import</code> <code>rlcompleter</code>

<code>import</code> <code>atexit</code>

<code>import</code> <code>os</code>

<code># tab completion </code>

<code>readline.parse_and_bind(</code><code>'tab: complete'</code><code>)</code>

<code># history file </code>

<code>histfile = os.path.join(os.environ[</code><code>'home'</code><code>], </code><code>'.pythonhistory'</code><code>)</code>

<code>try</code><code>:</code>

<code>    </code><code>readline.read_history_file(histfile)</code>

<code>except ioerror:</code>

<code>    </code><code>pass</code>

<code>atexit.register(readline.write_history_file, histfile)</code>

<code>del os, histfile, readline, rlcompleter</code>

把上面的代碼,儲存成tab.py檔案,然後儲存到下面的指定路徑之一:

<code>&gt;&gt;&gt; </code><code>import</code> <code>sys</code>

<code>&gt;&gt;&gt; sys.path</code>

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

為了省事點,我直接把tab.py檔案放到/usr/lib/python2.7這個目錄下面好了:

<code>xpleaf@py:~/seminar6/day1$ sudo mv tab.py /usr/lib/python2.</code><code>7</code><code>/</code>

<code>xpleaf@py:~/seminar6/day1$ ll /usr/lib/python2.</code><code>7</code><code>/tab.py</code>

<code>-rw-rw-r-- </code><code>1</code> <code>xpleaf xpleaf </code><code>419</code>  <code>8</code><code>月  </code><code>6</code> <code>23</code><code>:</code><code>53</code> <code>/usr/lib/python2.</code><code>7</code><code>/tab.py</code>

3.方案測試:導入tab子產品後,可使用tab鍵補全

下面就可以爽爽地使用tab鍵補全了,不過還是要先在python的互動界面中導入一下:

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

<code>&gt;&gt;&gt; </code><code>import</code> <code>sys    ===&gt;導入sys子產品隻是為了下面對tab鍵補全做測試</code>

<code>&gt;&gt;&gt; </code><code>import</code> <code>tab    ===&gt;這才是重點</code>

<code>&gt;&gt;&gt; sys.          ===&gt;輸入sys.後按兩次tab鍵</code>

<code>sys.__class__(              sys.exit(</code>

<code>sys.__delattr__(            sys.exitfunc(</code>

<code>sys.__dict__                sys.flags</code>

<code>sys.__displayhook__(        sys.float_info</code>

<code>sys.__doc__                 sys.float_repr_style</code>

<code>sys.__excepthook__(         sys.getcheckinterval(</code>

<code>sys.__format__(             sys.getdefaultencoding(</code>

<code>sys.__getattribute__(       sys.getdlopenflags(</code>

<code>sys.__hash__(               sys.getfilesystemencoding(</code>

<code>sys.__init__(               sys.getprofile(</code>

<code>sys.__name__                sys.getrecursionlimit(</code>

<code>sys.__new__(                sys.getrefcount(</code>

<code>sys.__package__             sys.getsizeof(</code>

<code>sys.__reduce__(             sys.get</code><code>trace</code><code>(</code>

<code>sys.__reduce_ex__(          sys.hexversion</code>

<code>sys.__repr__(               sys.long_info</code>

<code>sys.__setattr__(            sys.maxint</code>

<code>sys.__sizeof__(             sys.maxsize</code>

<code>sys.__stderr__              sys.maxunicode</code>

<code>sys.__stdin__               sys.meta_path</code>

<code>sys.__stdout__              sys.modules</code>

<code>sys.__str__(                sys.path</code>

<code>sys.__subclasshook__(       sys.path_hooks</code>

<code>sys._clear_type_cache(      sys.path_importer_cache</code>

<code>sys._current_frames(        sys.platform</code>

<code>sys._getframe(              sys.prefix</code>

<code>sys._mercurial              sys.ps1</code>

<code>sys.api_version             sys.ps2</code>

<code>sys.argv                    sys.py3kwarning</code>

<code>sys.builtin_module_names    sys.pydebug</code>

<code>sys.byteorder               sys.setcheckinterval(</code>

<code>sys.call_tracing(           sys.setdlopenflags(</code>

<code>sys.callstats(              sys.setprofile(</code>

<code>sys.copyright               sys.setrecursionlimit(</code>

<code>sys.displayhook(            sys.set</code><code>trace</code><code>(</code>

<code>sys.dont_write_bytecode     sys.stderr</code>

<code>sys.exc_clear(              sys.stdin</code>

<code>sys.exc_info(               sys.stdout</code>

<code>sys.exc_type                sys.subversion</code>

<code>sys.excepthook(             sys.version</code>

<code>sys.exec_prefix             sys.version_info</code>

<code>sys.executable              sys.warnoptions</code>

<code>&gt;&gt;&gt; sys.</code>

感覺好極了!雖然每次進入python的互動界面都要重新再導入一次tab子產品,可是有總比沒有好!對于我這樣的初學者來說,已經很滿足啦!