2012-06-13 104 views
1

我想实现一个使用cmd模块的python cmd。我想自动完成文件,所以我实现了一些方法,但是,我已经看到来自“complete_put(self,text,line,begidx,endidx):”的文本参数会去掉所有'/'字符。任何人都知道为什么,我该如何避免这种行为?谢谢:)斜杠和蟒蛇CMD

+1

欢迎来到SO!你能否添加更多细节?告诉我们你的源代码!你有什么尝试?你的用例是什么?什么工作?什么没有?谢谢! – jathanism

+0

这就是我试过的:http://pastebin.com/Zwie5uRW我已经在complete_put方法中添加了一条线索,以查看文本是什么。如果行是“put /”,则文本是“”。我已经在python 2上试了这个,顺便说一句。 – jsevilleja

+0

这听起来像你有一个好主意,你期望的行为,如果你可以把它翻译成[简短,自足,正确的例子](http://sscce.org/)它会让你的问题更容易回答。 –

回答

2

我解决了它。只需修改set_completer_delims属性。

+0

现在不存在了(或者我不能找到它?)解决方案是将斜线添加到'identchars'属性。 – sol

+0

@ S0lll0s在** readline **模块中找到'set_completer_delims'。我刚刚做了:'delims = readline.get_completer_delims()',然后''readline.set_completer_delims(delims.replace('/',''))''。这将为此场景适当地配置readline模块。 它工作得很好(Python 3.4)。 – LRMAAX

0

这是我使用的代码,它基于在互联网上找到的几个例子。

import os 
import cmd 
import readline 
class Shell(cmd.Cmd, object): 
    def __init__(self): 
     cmd.Cmd.__init__(self) 

    def __complete_path(self, path=None): 
     return ['/bin', '/boot', '/etc'] 

    def do_put(self,args): 
     print args 

    def complete_put(self, text, line, begidx, endidx): 
     print text 
     if not text: 
      return self.__complete_path() 
     return self.__complete_path(text) 
+0

只需尝试Shell()。cmdloop()并使用'put /'。它应该是'put/bin/boot/etc' – jsevilleja