Отправляет email-рассылки с помощью сервиса Sendsay

[prg] Вывод текста, обработка и парсинг команд в а-ля телнет клиенте

Добрый день
По теме курсовой и в целях самообразования, взял написание клиента а-ля
телнет.
Оговорюсь, что пишу на python, для подключения использую стандартную
либу telnetlib. Правда это врядли имеет сильно большое значение.
Возникли следующие вопросы:
1. Есть команды которые мы посылаем непосредственно серверу, а есть
команды, которые идут с каким-то префиксом и они являются системными
командами для самого клиента, ну типа !help. Т.Е. ! - Префикс для
системных команд. Каким образом лучше отслеживать подобные команды? При
вводе любой команды пользователем, проверять на то, не является ли
первый символ восклицательным знаком и если является, то передавать
управление куда нужно?
2. Есть у нас пачка системных команд для клиента, тут вроде просто, но
уточню. Мы просто пробегаемся по списку системных команд, пока не будет
найдено совпадение с тем, что ввел пользователь, верно?
3. После системной команды в рамках клиента, мы передаем какие-то
аргументы. Нам для этого нужно садиться и писать свой красивый парсер
который будет это дело разбирать и передавать в необходимый метод или
для этого существуют какие-то удобные решения, дабы не писать свой
велосипед?
4. Есть необходимость записывать так называемые алиасы/синонимы для
команд Т.Е. создаем синоним, где говорим, что по команде бла, мы
выполняем длинную строку - блаблаблаблаблабла. По сути все это понятно,
а вот как нам перехватывать такие алиасы? Т.Е. опять таки, каждую
команду пользователя отправлять гулять по списку доступных алиасов и,
если таковой существует, выполнять сущность алиаса, а если такового нет,
посылать его серверу? У меня дикое ощущение, что это все как-то долго
работает и очень сильно велосипедно. Или это мое ощущение от
неопытности? ).
5. Подобная задача, но на написание триггеров Т.Е. При определенном
сообщении от сервера, нам нужно выполнить какую-то команду. Т.Е. мы
создаем триггер, в котором будет указана строка и сущность триггера -
это понятно. А вот как перехватывать такие строчки? В голову приходит
посылать каждую строку от сервера в отдельный поток, где она будет
пробегаться по всем имеющимся триггерам и сравниваться с паттерном
триггера, как только таковой будет найден - выполнять команду. В
отдельный поток для того, чтобы не тормозить основной выход. Но у меня
опять ощущение, что это как-то будет тормозить.
6. Сервер посылает нам еще какую-то служебную информацию А-ля анси
цветов, которые идут непосредственно в тексте. Каким образом лучше
отпарсить такие вкрапления, передать их куда нужно и вычистить с текста.
Собственно как раз про анси сейчас речь и идет. Для этого есть какие-то
приблуды или опять ручками?
7. Ну и самый "тонкий" вопрос, на это нужно повесить элементарный гуй.
Т.Е. какое-то поле ввода для команд и что-то для вывода строк от
сервера. Ну с полем относительно понятно, воткнуть куда-то снизу и пусть
себе висит, а вот, что нам нужно для вывода текста от сервера? Гиганский
лейблна все окно? :-) Нужно что-то такое, куда будет литься текст от
сервера и с возможностью прокрутить на несколько экранов назад, чтоль.
Я был бы очень благодарен за любую информацию, даже если кто-то может
подсказать что-то хотя бы по одному из вопросов.
P.S. Кто знает telnetlib в python. Я читаю строки при помощи команды
read_some, пока все это дело в консольном режиме, но строки почему-то
разбиваются в любом месте где хотят, хотя в теории должно помещаться 80
символов. Т.Е. может быть такое, что на одной строке 2 символа и на
другую строку переносится все остальное, научите, как и почему такое
происходит.

Ответить   Sun, 03 May 2015 13:50:04 +0300 (#3261797)

 

Ответы:

Если в целях самообразования, то имеет. Если бы вы делали на сокетах -- это
было бы действительно "для целей самообразования".

А есть другие варианты? Менее сложные и более производительные?
Если есть, то используйте их.

Не верно. См. алгоритмы поиска -- есть более производительные варианты, чем
простой перебор.
А если вы используете python, то встроенные объекты языка сами выполняют
сортировку и поиск оптимальным образом.

Если python, то это split() -- вот и весь парсер.>

Это дико велосипедно, потому что это курсовая работа. А темы курсовых
специально выбираются так, чтобы человек в ходе выполнения прощупал базовые
темы (например, обработка строк, сетевые протоколы, поиск и сортировка и
т.п.).

Ответить   "i_chay" Fri, 8 May 2015 07:57:39 +0300 (#3263451)