在Windows上使用Python中的cmd模块进行pyreadline自动完成的奇怪行为

时间:2013-02-08 01:38:09

标签: python autocomplete cmd readline

我正在尝试使用以下代码运行这个简单的代码:

  • Python 2.7.2
  • Windows 7
  • 从pip

    安装的pyreadline
    class HelloWorld(cmd.Cmd):
        """Simple command processor example."""
    
        FRIENDS = [ 'Alice', 'Adam', 'Barbara', 'Bob', 'Chris' ]
    
        def do_greet(self, person):
            "Greet the person"
            if person and person in self.FRIENDS:
                greeting = 'hi, %s!' % person
            elif person:
                greeting = "hello, " + person
            else:
                greeting = 'hello'
            print greeting
    
        def complete_greet(self, text, line, begidx, endidx):
            if not text:
                completions = self.FRIENDS[:]
            else:
                completions = [ f
                                for f in self.FRIENDS
                                if f.startswith(text)
                                ]
            return completions
    
        def do_EOF(self, line):
            return True
    
    if __name__ == '__main__':
        HelloWorld().cmdloop()
    

似乎自动完成功能不起作用。当我运行它并输入时:

(Cmd) greet A<tab>

它没有提供自动完成建议,但它应该给“Alice Adam”。

然而,当我输入:

(Cmd) greet C<tab>

正确地使用'Chris'自动完成。所以它似乎与自动完成是否有多个匹配有关。

有人有解释或知道如何解决这个问题吗?

谢谢!

编辑:删除了剩余的短语。

1 个答案:

答案 0 :(得分:0)

好的,我想通了。 pyreadlineconfig.ini文件位于错误的目录中。

我按照Ambiguous tab completion not working in iPython on Windows

中的修正操作

表示将此文件复制到%HOMEPATH%。原来这个环境变量在我的电脑上配置错误,文件被复制到e:\ pyreadlineconfig.ini。

正确的路径,但应该是c:\ users \ username。