[Python] 어떻게 파이썬, 명령 줄 프로그램을 자동 완성 임의의 것들을 확인하지 인터프리터


Answers

cmd 문서를 따라하면 괜찮을거야.

import cmd

addresses = [
    'here@blubb.com',
    'foo@bar.com',
    'whatever@wherever.org',
]

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

탭 -> 탭 -> 보내기 -> 탭 -> 탭 -> f -> 탭 출력

(Cmd)
help  send
(Cmd) send
foo@bar.com            here@blubb.com         whatever@wherever.org
(Cmd) send foo@bar.com
(Cmd)
Question

파이썬 인터프리터 (유닉스에서)에서 파이썬 객체의 자동 완성을 설정하는 방법을 알고 있습니다.

  • Google은이를 수행하는 방법에 대한 많은 히트를 보여줍니다.
  • 불행하게도, 내가하는 일을 찾기가 어렵다는 언급이 너무 많습니다. 약간 다른 점이 있습니다.

파이썬으로 작성된 명령 행 프로그램에서 임의 항목을 탭 / 자동 완성하는 방법을 알아야합니다.

내 특정 유스 케이스는 이메일을 보내야하는 명령 행 파이썬 프로그램이다. 사용자가 전자 메일 주소의 일부를 입력 할 때 (그리고 선택적으로 Tab 키를 누름) 전자 메일 주소를 자동 완성 할 수 있기를 원합니다.

나는 창문이나 맥, 그냥 리눅스에서 작동하지 않아도됩니다.




아무도 argcomplete에 대해 언급하지 않았다는 것에 놀랐습니다. 다음은 docs의 예제입니다.

from argcomplete.completers import ChoicesCompleter

parser.add_argument("--protocol", choices=('http', 'https', 'ssh', 'rsync', 'wss'))
parser.add_argument("--proto").completer=ChoicesCompleter(('http', 'https', 'ssh', 'rsync', 'wss'))



# ~/.pythonrc
import rlcompleter, readline
readline.parse_and_bind('tab:complete')

# ~/.bashrc
export PYTHONSTARTUP=~/.pythonrc