Перейти к содержимому

Это пример кода для управления оборудованием.

#!/usr/bin/env python3
# Это пример кода сделанный фрилансером для управления оборудованием (работа не доделана), но не проверенный мой.


import time

import pexpect
import logging
from config import config


def send_pass(connection, passwd):
    connection.sendline(passwd)
    connection.expect('>')


def get_auth_ssh(ip, login, passwd):
    logging.info('Подключение к %s'.format(ip))
    logging.debug('Логин: "{}", пароль: "{}"'.format(login, passwd))
    connect_string = '/usr/bin/ssh {}@{}'.format(login, ip)
    try:
        connection = pexpect.spawn(command=connect_string, encoding='utf-8', maxread=1000000)
        connection.sendline('/usr/bin/ssh {}@{}'.format(login, ip))
        index = connection.expect(
            ['Are you sure you want to continue connecting (yes/no/[fingerprint])?', '[Pp]assword', '>'])
        if 0 == index:
            """Подключение первый раз к этому устройству"""
            connection.sendline('yes')
            index = connection.expect(['>', '[Pp]assword'])
            if 1 == index:
                send_pass(connection, passwd)
        else:
            if 1 == index:
                """Подключение 2 и более раз"""
                send_pass(connection, passwd)
        return connection
    except Exception:
        logging.info(connection)


def get_log(connection, count):
    connection.sendline('\n')
    connection.expect('>')
    connection.sendline('log print\r')
    time.sleep(2)
    connection.expect('>')

    buffer = connection.buffer.split('\r\n\r')
    print("buffer = '{}'".format(buffer))
    log = buffer[1].split(' \r\n')
    for s in log:
        s = s.replace('\r\n', '')
    return log[-count:]


def main():
    logging.basicConfig(level=logging.DEBUG, filename='log/app.log', format='%(asctime)s - %(message)s')
    logging.info('Программа запущена')
    username = config['microtik']['username']
    password = config['microtik']['password']
    ip = config['microtik']['ip']
    ssh = get_auth_ssh(ip, username, password)
    log = get_log(connection=ssh, count=30)
    for s in log:
        print(s)
    logging.info('Программа остановлена.')


if '__main__' == __name__:
    main()