Я нахожусь в маринаде, написав скрипт, который может использовать SSH на устройстве, запустить команду и проанализировать эти данные в файл. Я написал это с помощью Pyparsing и Exscript, тогда я узнал, что устройство, на котором я буду использовать это, использует Python 2.4.4 и Debian 4.1.1, поэтому модули не будут работать над этим. Теперь я вернулся к чертежной доске, пытаясь выяснить, как это сделать: NO модулей. У кого-нибудь есть ссылка или укажите мне в правильном направлении? Заранее спасибо.Использование Python для ssh без модулей
Вот мой код:
from Exscript.util.interact import read_login
from Exscript.protocols import SSH2
import uuid
from pyparsing import *
import re
import yaml
account = read_login()
conn = SSH2()
conn.connect('172.0.0.1')
conn.login(account)
conn.execute('foobar')
data = conn.response
conn.send('exit\r')
conn.close()
###### PARSER ######
date_regex = re.compile(r'\d\d-\d\d-\d\d')
time_regex = re.compile(r'\d\d:\d\d:\d\d')
pairs = [{'category': 'General Information',
'kv': Group(Word(alphanums) + Word(alphanums))},
{'category': 'Last Reset:',
'kv': Group(Word(alphas, max=1) + Word(alphas)) + Literal(':').suppress()
+ Group(Regex(date_regex) + Regex(time_regex)
+ Optional(SkipTo(LineEnd())))
}
]
# build list of categories with associated parsing rules
categories = [Word("# ").suppress() + x['category']
+ OneOrMore(Group(x['kv']))
for x in pairs]
# account for thing you don't have specific rules for
categories.append(Word("#").suppress() + Optional(SkipTo(LineEnd())) +
Group(OneOrMore(Combine(Word(alphanums) + SkipTo(LineEnd()))))
)
# OR all the categories together
categories_ored = categories[0]
for c in categories[1:]:
categories_ored |= c
configDef = OneOrMore(categories_ored)
suppress_tokens = ["show all", "SSH>", "Active System Configuration"]
suppresses = [Literal(x).suppress() for x in suppress_tokens]
for s in suppresses:
configDef.ignore(s)
result = configDef.parseString(data)
for e in result:
print(e)
with open('/Users/MyMac/development/data.yml', 'w') as outfile:
outfile.write(yaml.dump(e))
UPDATE
Я следовал советам ниже и теперь установили Pexpect
и нашел старую версию Python-Pyparsing
, что я также установлен. Поэтому я снова нахожусь на пути к тому, чтобы мои скрипты работали с модулями. Благодаря!
Как насчет использования 'subprocess' для общения с системой' ssh'? 'pexpect' выглядит как ранний чистый модуль Python, который требует только' pty'. – hpaulj
http://www.lag.net/paramiko/legacy.html paramiko - еще одна ранняя чистая библиотека SSH Python. – hpaulj
@hpaulj Я искал использование 'subprocess', но имел проблемы с этим подключением и запуском команды. Я посмотрел на «paramiko», прежде чем написал сценарий выше, но имел некоторые проблемы, поэтому я пошел с «Exscript». Я посмотрю на ранние выпуски 'paramiko' и посмотрим, сработает ли это. Другое дело, что 'debian' настолько старый и не позволяет мне устанавливать модули очень легко. – tjoenz