GNU/Linux >> Belajar Linux >  >> Linux

Cara membuat python, program baris perintah autocomplete hal-hal yang sewenang-wenang BUKAN juru bahasa

Gunakan readline Python binding. Misalnya,

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)

Dokumen modul resmi tidak lebih mendetail, lihat dokumen readline untuk info lebih lanjut.


Ikuti dokumentasi cmd dan Anda akan baik-baik saja

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()

Keluaran untuk tab -> tab -> kirim -> tab -> tab -> f -> tab

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

Karena Anda mengatakan "BUKAN juru bahasa" dalam pertanyaan Anda, saya rasa Anda tidak ingin jawaban yang melibatkan python readline dan semacamnya. (edit :kalau dipikir-pikir, jelas bukan itu masalahnya. Ho hum. Saya pikir info ini menarik, jadi saya akan meninggalkannya di sini. )

Saya pikir Anda mungkin setelah ini.

Ini tentang menambahkan penyelesaian tingkat shell ke perintah arbitrer, memperluas penyelesaian tab bash sendiri.

Singkatnya, Anda akan membuat file yang berisi fungsi shell yang akan menghasilkan kemungkinan penyelesaian, simpan ke dalam /etc/bash_completion.d/ dan daftarkan dengan perintah complete . Berikut cuplikan dari halaman tertaut:

_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

Dalam hal ini, ketikkan foo --[TAB] akan memberi Anda nilai dalam variabel opts , yaitu --help , --verbose dan --version . Untuk tujuan Anda, pada dasarnya Anda ingin menyesuaikan nilai yang dimasukkan ke dalam opts .

Lihat contoh di halaman tertaut, semuanya cukup mudah.


Linux
  1. Bagaimana Suatu Program Memutuskan Apakah Memiliki Output Berwarna atau Tidak?

  2. Bagaimana Membuat Program Apa Pun Bekerja Dengan Perintah Tee?

  3. Bagaimana Membuat Program Dapat Dieksekusi Dari Mana Saja?

  1. Bagaimana Agar Ibus Tidak Abaikan ~/.xcompose?

  2. Apa yang saya gunakan di linux untuk membuat program python dapat dieksekusi

  3. Bagaimana cara membuat git tidak meminta kata sandi saat menarik?

  1. Bagaimana cara membuat skrip Python dijalankan sebagai layanan?

  2. Bagaimana cara membuat modul Python saya tersedia di seluruh sistem di Linux?

  3. Bagaimana cara menambahkan dukungan readline di juru bahasa polyml?