当前位置: 首页 > 面试题库 >

OS X Terminal中Python解释器中的制表符完成

曹和正
2023-03-14
问题内容

几个月前,我写了一篇博客文章,详细介绍了如何在标准的Python交互式解释器中实现制表符补全-
我曾经认为该功能仅在IPython中可用。考虑到由于IPython unicode问题有时不得不切换到标准解释器,所以我发现它非常方便。

最近,我在OS X中做了一些工作。不满的是,该脚本似乎不适用于OS X的Terminal应用程序。我希望一些在OS
X方面有经验的人能够帮助我解决它,以便它也可以在Terminal中使用。

我正在复制下面的代码

import atexit
import os.path

try:
    import readline
except ImportError:
    pass
else:
    import rlcompleter

    class IrlCompleter(rlcompleter.Completer):
        """
        This class enables a "tab" insertion if there's no text for
        completion.

        The default "tab" is four spaces. You can initialize with '\t' as
        the tab if you wish to use a genuine tab.

        """

        def __init__(self, tab='    '):
            self.tab = tab
            rlcompleter.Completer.__init__(self)


        def complete(self, text, state):
            if text == '':
                readline.insert_text(self.tab)
                return None
            else:
                return rlcompleter.Completer.complete(self,text,state)


    #you could change this line to bind another key instead tab.
    readline.parse_and_bind('tab: complete')
    readline.set_completer(IrlCompleter('\t').complete)


# Restore our command-line history, and save it when Python exits.
history_path = os.path.expanduser('~/.pyhistory')
if os.path.isfile(history_path):
    readline.read_history_file(history_path)
atexit.register(lambda x=history_path: readline.write_history_file(x))

请注意,我已经从博客文章中的版本中对其进行了稍微的编辑,以便IrlCompleter使用真正的制表符对进行初始化,这似乎是Terminal中Tab键输出的结果。


问题答案:

为了避免不得不使用更多的GPL代码,Apple不提供真正的读取线。取而代之的是,它使用BSD许可的libedit,它仅在大多数情况下与readline兼容。如果要完成,请构建自己的Python(或使用Fink或MacPorts)。



 类似资料:
  • 问题内容: 如何从当前执行的Python脚本中找到当前运行的Python解释器的完整路径? 问题答案: 包含当前运行的Python解释器的完整路径。

  • 问题内容: 我决定学习一点Python。第一部分介绍说它使用缩进来对语句进行分组。虽然最好的习惯显然是仅使用其中一种,但是如果我互换它们会发生什么呢?多少个空格将被视为等于一个制表符?如果将制表符和空格混合使用,还是根本无法工作? 问题答案: 空格不等同于制表符。用制表符缩进的行与用1、2、4 或8个 空格缩进的行的缩进不同。 通过反例证明( 错误或至多限制-tab!= 4个空格 ): 的‘显示一

  • 当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。 由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。 CPython 当我们从Python官方网站下载并安装好

  • 当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。 由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。 CPython 当我们从Python官方网站下载并安装好

  • 本文向大家介绍深入Python解释器理解Python中的字节码,包括了深入Python解释器理解Python中的字节码的使用技巧和注意事项,需要的朋友参考一下 我最近在参与Python字节码相关的工作,想与大家分享一些这方面的经验。更准确的说,我正在参与2.6到2.7版本的CPython解释器字节码的工作。 Python是一门动态语言,在命令行工具下运行时,本质上执行了下面的步骤:     当第一

  • 问题内容: 这个问题已经在这里有了答案 : Python何时为相同的字符串分配新的内存? (5个答案) 7年前关闭。 我遇到了这种奇怪的行为,这种行为仅在交互式Python会话中发生,而在编写脚本并执行时却没有。 在Python中,字符串是不可变的数据类型,因此: 现在,奇怪的部分: 我已经看到,字符串中包含空格会导致此行为。如果将其放在脚本中并运行,则在两种情况下结果均为True。 有人对此有任