Здравствуйте, замечательные люди,
Я пишу клиент-серверную программу, которая в основном дает мне bind shell .Я использовал библиотеку Cmd для автозаполнения имен файлов и папок внутри оболочки bind.Я пишу do_cd и complete_cd функций для автозаполнения.
До сих пор я могу только вкладку завершить подпапки текущей папки.
Моя 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 ....' то есть папки с двумя слешами и т. Д.
Но я не знаю, как разместить эту логикув функции complete_cd.
То, что я пытался написать, это:
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)]
Если кто-то может предложить любой другой подход, то это тоже хорошо.
Любая помощь приветствуется!