Python Cmd模块'~';完成
我一直在玩cmd 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
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
?