Como posso dizer conclusões completas de tab válidas para argumentos do meu script Python


14

Digamos que eu tenha um programa hello.py e um possível argumento válido seja:

./hello.py autoawesomesauce

É possível digitar:

./hello.py auto[tab]

nesse ponto, o argumento parcialmente concluído é enviado para hello, que o reconhece como tal e o conclui no shell para:

./hello.py autoawesomesauce

Eu sei que o git faz algo assim, mas isso pode ser feito para um script Python + Bash?


4
O script Python não pode. festança deve.

voto positivo para o que exatamente?

Respostas:


7

Em sistemas Linux, geralmente é possível encontrar um grande número de exemplos de scripts em: /etc/bash_completion.d. Se você originar esses scripts, obterá o comportamento de preenchimento automático.

Eu incluí um exemplo desse diretório. Este é o script de conclusão para unrar.

_unrar()
{
    local cur

    COMPREPLY=()
    _get_comp_words_by_ref cur

    if [[ "$cur" == -* ]] ; then
        COMPREPLY=( $( compgen -W '-ad -ap -av- -c- -cfg- -cl -cu \
            -dh -ep -f -idp -ierr -inul -kb -o+ -o- -ow -p -p- -r -ta \
            -tb -tn -to -u -v -ver -vp -x -x@ -y' -- "$cur" ) )
    else
        if [ $COMP_CWORD -eq 1 ]; then
            COMPREPLY=( $( compgen -W 'e l lb lt p t v vb vt x' -- "$cur" ) )
        else
            _filedir '@(rar|RAR)'
        fi
    fi

} &&
complete -F _unrar -o filenames unrar

O que é _get_comp_words_by_ref?
e-info128

4

Essa funcionalidade tem zero a ver com Python. Essa é uma funcionalidade pura do shell subjacente. Portanto, leia os documentos do bash sobre o preenchimento automático.

Pesquise no Google por "preenchimento automático do bash" e você encontrará pelo menos 5 documentos razoáveis ​​nos 10 primeiros hits.


O que significa que pode ser uma boa ideia agrupar seu script Python em um script Bash, permitindo que o script Bash faça o máximo possível de manipulação / análise de argumentos.
Kazark 11/09/12

0

Veja esta postagem StackOverflow relacionada.

complete 'your_command' 'p/*/`echo list_of_your_options`/'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.