- 작성시간 : 2012/11/13 23:21
- 퍼머링크 : mcchae.egloos.com/10956081
- 덧글수 : 0
시스코 스위치 등에 콘솔이나 telnet 등으로 접속을 하면
단일 라인 명령을 내릴 수가 있습니다.
보통 이런 식의 단일 명령을 CLI (Command Lion Interface) 라고 합니다.
그런데 명령을 제대로 수행하는가 검증하는 파싱기능 뿐만 아니라,
그 다음 명령이 무엇인가를 tab을 눌러 알 수 있습니다.
이런 기능을 GNU의 readline 기능을 이용하여 구현할 수 있습니다.
(C 에서는 libreadline 라이브러리를 이용하면 됩니다)
물론 C로 구현할 수도 있지만,
혹여나 lex(flex)와 yacc(bison) 로 구현할라 치면 보통 쉽게 할 수 있는
정도가 아닙니다.
더군다나 거기에 readline 기능까지 넣으려면... 휴우 한숨부터 나오지요.
그런데 파이썬으로 이런 기능을 간단하게 구현할 수 있습니다.
일단은 다음 예제로 출발을 합니다.
#!/usr/bin/env python
import readline
if 'libedit' in readline.__doc__:
readline.parse_and_bind("bind ^I rl_complete") # for osx
else:
readline.parse_and_bind("tab: complete")
readline.parse_and_bind('set editing-mode vi')
COMMANDS = ['extra', 'extension', 'stuff', 'errors', 'email', 'foobar', 'foo']
def complete(text, state):
for cmd in COMMANDS:
if cmd.startswith(text):
if not state:
return cmd
else:
state -= 1
readline.set_completer(complete)
raw_input('Enter section name: ')
이제 실행을 시키고,
$ python rline.py
Enter section name:
<탭> 키를 누르면,
email errors extension extra foo foobar stuff
명령이 보이며,
Enter section name: e
<탭> 키를 누르면,
email errors extension extra
Enter section name: ext
<탭> 키를 누르면,
extension extra
이와 같이 다음에 나올 문자가 알아서 보이며
단일 문자가 남았을 경우에는 자동으로 해당 단어로 확장이 됩니다.
이곳에서 부터 여러 문자열이 나오도록 하고,
상태 변이 코딩을 간단히 하면, 파싱 및 다음 나올
문자열을 자동으로 보이도록 확장할 수 있습니다.
어느분께는 도움이 되셨기를...
덧글