斜杠和python命令

斜杠和python命令,python,cmd,Python,Cmd,我正在尝试使用cmd模块实现一个python cmd。我想自动完成文件,所以我实现了一些方法,但是,我看到“complete_put(self,text,line,begidx,endidx):”中的text参数会去除所有的“/”字符。有人知道为什么,我怎样才能避免这种行为?谢谢:)这是我使用的代码,它基于互联网上的几个示例 import os import cmd import readline class Shell(cmd.Cmd, object): def __init__(se

我正在尝试使用cmd模块实现一个python cmd。我想自动完成文件,所以我实现了一些方法,但是,我看到“complete_put(self,text,line,begidx,endidx):”中的text参数会去除所有的“/”字符。有人知道为什么,我怎样才能避免这种行为?谢谢:)

这是我使用的代码,它基于互联网上的几个示例

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)

我解决了。只需修改set\u completer\u delims属性。

欢迎使用SO!你能补充更多细节吗?向我们展示你的源代码!你试过什么?你的用例是什么?什么有效?什么没有?谢谢这就是我所尝试的:我在complete_put方法中放置了一个跟踪,以查看文本是什么。如果行为“put/”,则文本为“”。顺便说一句,我在python 2上尝试过这个方法。听起来你对预期的行为有很好的了解,如果你能将其转换成一个简单的例子,那么你的问题会更容易回答。我不知道如何在注释中发布代码,所以我创建了一个答案。只需尝试Shell().cmdloop()并使用“put/”。现在应该是不再存在的“put/bin/boot/etc”(或者我就是找不到了?)。解决方案是在
identchars
属性中添加斜杠。@S0lll0s在readline模块中可以找到
set\u completer\u delims
。我刚刚做了:
delims=readline.get\u completer\u delims()
然后
readline.set\u completer\u delims(delims.replace('/','')
。这将为此场景适当地配置readline模块。它工作得很好(Python 3.4)。