选项卡使用python Cmd库完成文件夹名称

2024-06-16 13:04:23 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好,大家好

我正在编写一个客户机-服务器程序,它基本上给了我一个bind shell。我使用Cmd库自动完成绑定shell中的文件名和文件夹。我正在编写自动完成的do\u cdcomplete\u cd函数

到目前为止,我只能用tab键完成当前文件夹的子文件夹

我的complete_cd功能现在看起来像这样:

def complete_cd(self, text, line, begidx, endidx):
    if not text:
        completions = self.subfolders[:] #subfolders contains list of sub folders of current folder
    else:
        completions = [f for f in self.subfolders if f.startswith(text)]

我被困在一个点上,我想完成以下内容: cd/us{tab}/sh{tab}哪个应该做cd/usr/share。 我尝试使用os.walk(“/”)从客户端获取所有文件夹路径,并将其附加到列表中。现在,根据斜杠的数量,我创建了一个字典。例如:dict.get(1)将包含'/dev\n/home\n/media\n…'即只有一个斜杠的文件夹,dict.get(2)将包含'/etc/apache2\n/etc/apt\n…'即有两个斜杠的文件夹,依此类推

但是我不知道如何把这个逻辑放到完整的函数中

我想写的是:

if text.startswith('/'):
    slash_counter = text.count('/')
    dir_list = list(filter(None, self.dict[slash_counter].split('\n')))
    completions = [f for f in dir_list if f.startswith(text)]

如果有人能提出任何其他方法,那也没关系

感谢您的帮助


Tags: 函数textself文件夹ifcdshelltab