Estou ciente de como configurar o preenchimento automático de objetos Python no interpretador Python (no Unix).
- O Google mostra muitos acessos para explicações sobre como fazer isso.
- Infelizmente, há tantas referências a isso que é difícil encontrar o que preciso fazer, o que é um pouco diferente.
Preciso saber como habilitar o preenchimento automático / tab de itens arbitrários em um programa de linha de comando escrito em python.
Meu caso de uso específico é um programa python de linha de comando que precisa enviar e-mails. Quero poder preencher automaticamente os endereços de e-mail (tenho os endereços no disco) quando o usuário digitar parte deles (e, opcionalmente, pressionar a tecla TAB).
Não preciso dele para funcionar em windows ou mac, apenas linux.
python
linux
unix
command-line
autocomplete
Paul D. Eden
fonte
fonte
Respostas:
Use as
readline
ligações do Python . Por exemplo,Os documentos oficiais do módulo não são muito mais detalhados, veja os documentos readline para mais informações.
fonte
Siga a documentação do cmd e você ficará bem
Saída para guia -> guia -> enviar -> guia -> guia -> f -> guia
fonte
Já que você diz "NÃO é intérprete" em sua pergunta, acho que você não quer respostas envolvendo python readline e coisas do gênero. ( editar : em retrospectiva, obviamente não é o caso. Ei, hum. Acho que essas informações são interessantes de qualquer maneira, então vou deixá-las aqui ) .
Eu acho que você pode estar depois disso .
Trata-se de adicionar o preenchimento no nível do shell a comandos arbitrários, estendendo o preenchimento com tab do próprio bash.
Em poucas palavras, você criará um arquivo contendo uma função de shell que irá gerar possíveis completações, salvá-lo
/etc/bash_completion.d/
e registrá-lo com o comandocomplete
. Aqui está um snippet da página vinculada:Nesse caso, a digitação
foo --[TAB]
fornecerá os valores da variávelopts
, ou seja--help
,--verbose
e--version
. Para seus propósitos, você essencialmente desejará personalizar os valores que são colocados emopts
.Dê uma olhada no exemplo na página vinculada, é tudo muito simples.
fonte
Estou surpreso que ninguém tenha mencionado argcomplete, aqui está um exemplo dos documentos:
fonte
Aqui está uma versão funcional completa do código que foi fornecido pela ephemient aqui (obrigado).
fonte
fonte
readline.parse_and_bind('tab:complete')
porreadline.parse_and_bind ("bind ^I rl_complete")
Você pode tentar usar o Python Prompt Toolkit , uma biblioteca para construir aplicativos de linha de comando interativos em Python.
A biblioteca facilita a adição de funcionalidade de preenchimento automático interativo, permitindo que o usuário use a Tabchave para alternar visualmente pelas opções disponíveis. A biblioteca é multiplataforma (Linux, OS X, FreeBSD, OpenBSD, Windows). Exemplo:
(Fonte da imagem: pcgli )
fonte
As respostas postadas funcionam bem, mas abri o código-fonte de uma biblioteca de preenchimento automático que escrevi no trabalho. Nós o usamos há algum tempo na produção e é rápido, estável e fácil de usar. Ele ainda tem um modo de demonstração para que você possa testar rapidamente o que obteria ao digitar palavras.
Para instalá-lo, basta executar:
pip install fast-autocomplete
Aqui está um exemplo:
Checkout: https://github.com/wearefair/fast-autocomplete para o código-fonte.
E aqui está uma explicação de como funciona: http://zepworks.com/posts/you-autocomplete-me/
Lida com erros de grafia e, opcionalmente, classificação pelo peso da palavra. (digamos que
burrito
seja mais importante do quebook
, então você dáburrito
uma "contagem" maior e ela aparecerá antesbook
nos resultados.Palavras são um dicionário e cada palavra pode ter um contexto. Por exemplo, a "contagem", como exibir a palavra, algum outro contexto em torno da palavra, etc. Neste exemplo, as palavras não têm nenhum contexto.
fonte