Python Cmd模块'~';完成

Python Cmd模块'~';完成,python,cmd,tab-completion,tilde,Python,Cmd,Tab Completion,Tilde,我一直在玩cmd python模块,并在看文本完成函数。我一直试图让它将“~”扩展/识别到我的主目录,但没有成功 我注意到,我可以通过覆盖cmd模块中的completedefault(self,*ignored)方法来处理默认完成。其中,忽略是文本、行、begidx、endidx的元组。如果我输入命令my_command./folder则text参数将为“/folder”,这意味着我可以执行类似的操作:glob.glob(text+'*'),返回该文件夹中所有文件的列表。但是,如果我现在执行my

我一直在玩cmd python模块,并在看文本完成函数。我一直试图让它将“~”扩展/识别到我的主目录,但没有成功

我注意到,我可以通过覆盖cmd模块中的
completedefault(self,*ignored)
方法来处理默认完成。其中,
忽略
是文本、行、begidx、endidx的元组。如果我输入命令
my_command./folder
text
参数将为“/folder”,这意味着我可以执行类似的操作:
glob.glob(text+'*')
,返回该文件夹中所有文件的列表。但是,如果我现在执行
my_command~/folder
text
变量现在只包含
/folder
,因此我无法使用
os.path.expanduser(text)
确定该文件夹的绝对路径并显示该文件夹中的所有文件


基本上,我想知道是否有人能给我指出正确的方向,以便用
~
扩展路径

从以下方面展开答案:

您可以使用以下命令覆盖cmd模块的方法:

def completedefault(self, *ignored):
        # Set the autocomplete preferences
        readline.set_completer_delims(' \t\n;')
        readline.parse_and_bind("tab: complete")
        readline.set_completer(complete)
完整的方法如下所示:

def complete(text, state):
    return (glob.glob(os.path.expanduser(text)+'*')+[None])[state]

现在应该允许
~
扩展。

您需要隔离感兴趣的内容
expanduser(“~/folder”)
将为您提供所需的内容。您能使用
begidx
/
endidx