Tab завершить имена папок с помощью библиотеки Python Cmd - PullRequest
0 голосов
/ 20 сентября 2019

Здравствуйте, замечательные люди,

Я пишу клиент-серверную программу, которая в основном дает мне 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)]

Если кто-то может предложить любой другой подход, то это тоже хорошо.

Любая помощь приветствуется!

...