GNU/Linux >> Znalost Linux >  >> Linux

Jak vytvořit python, program příkazového řádku, který automaticky doplňuje libovolné věci, NE překladač

Použijte readline Pythonu vazby. Například,

import readline

def completer(text, state):
    options = [i for i in commands if i.startswith(text)]
    if state < len(options):
        return options[state]
    else:
        return None

readline.parse_and_bind("tab: complete")
readline.set_completer(completer)

Oficiální dokumenty modulu nejsou o mnoho podrobnější, další informace najdete v readline docs.


Postupujte podle dokumentace cmd a budete v pořádku

import cmd

addresses = [
    '[email protected]',
    '[email protected]',
    '[email protected]',
]

class MyCmd(cmd.Cmd):
    def do_send(self, line):
        pass

    def complete_send(self, text, line, start_index, end_index):
        if text:
            return [
                address for address in addresses
                if address.startswith(text)
            ]
        else:
            return addresses


if __name__ == '__main__':
    my_cmd = MyCmd()
    my_cmd.cmdloop()

Výstup pro kartu -> kartu -> odeslat -> kartu -> kartu -> f -> kartu

(Cmd)
help  send
(Cmd) send
[email protected]            [email protected]         [email protected]
(Cmd) send [email protected]
(Cmd)

Protože ve své otázce říkáte „NOT interpreter“, myslím, že nechcete odpovědi zahrnující python readline a podobně. (upravit :při zpětném pohledu tomu tak zjevně není. Ho hukot. Myslím, že tyto informace jsou každopádně zajímavé, takže je zde nechám. )

Myslím, že bys mohl být po tomhle.

Jde o přidání dokončování na úrovni shellu k libovolným příkazům a rozšíření vlastního dokončování tabel v bash.

Stručně řečeno, vytvoříte soubor obsahující funkci shell, která vygeneruje možná dokončení, uložte jej do /etc/bash_completion.d/ a zaregistrujte jej pomocí příkazu complete . Zde je úryvek z odkazované stránky:

_foo() 
{
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts="--help --verbose --version"

    if [[ ${cur} == -* ]] ; then
        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
        return 0
    fi
}
complete -F _foo foo

V tomto případě zadejte foo --[TAB] vám dá hodnoty v proměnné opts , tj. --help , --verbose a --version . Pro vaše účely budete v podstatě chtít upravit hodnoty, které se vkládají do opts .

Podívejte se na příklad na odkazované stránce, je to všechno docela jednoduché.


Linux
  1. Jak zajistit, aby jakýkoli program fungoval s příkazem Tee?

  2. Jak zajistit, aby Ibus neignoroval ~/.xcompose?

  3. Co používám na linuxu k vytvoření spustitelného programu python

  1. Jak bych vytvořil python sám ze zdrojového kódu na Ubuntu?

  2. Jak přimět git, aby při vytažení nepožadoval heslo?

  3. Jak zajistit, aby skript Python běžel jako služba?

  1. Jak zpřístupnit můj modul Python v systému Linux?

  2. Dvě verze pythonu na linuxu. jak nastavit 2.7 jako výchozí

  3. Soubor 'readline/readline.h' nebyl nalezen