Архив метки: python

Работаем на python с протоколом snmp

Есть несколько модулей, которые помогают работать с snmp на python. Гугл в помощь какие. Наиболее популярный: pysnmp. В Ubuntu ставится как:

pip install pysnmp

Напишем на Python аналог команды из консоли, которая получает  список мак адресов на портах свичей Dlink:

snmpwalk -v2c -c XFiles 172.18.114.6 1.3.6.1.2.1.17.7.1.2.2.1.2

Снимок экрана из 2016-05-20 10-05-50

Код:

from pysnmp.entity.rfc3413.oneliner import cmdgen

cmdGen = cmdgen.CommandGenerator()

errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.nextCmd(
    cmdgen.CommunityData('XFiles'),
    cmdgen.UdpTransportTarget(('172.18.114.6', 161)),
    '1.3.6.1.2.1.17.7.1.2.2.1.2'    
)

if errorIndication:
    print(errorIndication)
else:
    if errorStatus:
        print('%s at %s' % (
            errorStatus.prettyPrint(),
            errorIndex and varBindTable[-1][int(errorIndex)-1] or '?'
            )
        )
    else:
        for varBindTableRow in varBindTable:
            for name, val in varBindTableRow:
                print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))

Снимок экрана из 2016-05-20 10-07-41

Потоки на Python

На удивление, на такую простую вещь как создание потоков, потратил пару часов, из-за обилия в интернетиках примеров с ошибками в коде. Потому привожу рабочий пример:

#!/usr/local/bin/python
# coding=utf-8
import threading
import time

debug=True
#количество одновременно запускаемых потоков
thread_count=10;

def putlog(txt):
    if (debug==True):
     print txt
def worker(th):
    putlog("--стартовал поток "+str(th));
    i=0
    while i<config.thread_count:
     putlog("--поток "+str(th)+", шаг "+str(i))
     time.sleep(1)
     i=i+1
def main():
    putlog("-скрипт стартовал!");    
    #запускаем потоки
    for i in xrange(thread_count):
	thread = threading.Thread(target=worker, args=(i,)).start()	
    #ждем пока потоки завершатся	
    while threading.active_count() >1:
     putlog("!ждем завершения потоков")	
     time.sleep(1)
    putlog("-скрипт закончил работу!");	 
main()

Результат работы скрипта:

-скрипт стартовал!
--стартовал поток 0
--поток 0, шаг 0
--стартовал поток 1
--поток 1, шаг 0
--стартовал поток 2
 !ждем завершения потоков
--поток 2, шаг 0
--поток 0, шаг 1
!ждем завершения потоков
--поток 1, шаг 1
--поток 2, шаг 1
--поток 0, шаг 2
!ждем завершения потоков--поток 1, шаг 2

--поток 2, шаг 2
!ждем завершения потоков
-скрипт закончил работу

Отправка сообщения на email по smtp, в utf8 с телом в html

import smtplib   
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

		 msg = MIMEMultipart('alternative')
		 html_body="Внимание! У вас есть задача (№"+str(id)+") в sbss, которая уже длительное время находится в статусе ожидания! Через 3 дня она будет автоматически закрыта.. <br/><a href=https://oeirfoeriferoife.ru>"+name+"</a>".encode('utf-8')
		 msg.set_charset("utf-8")
		 msg['Subject'] = "Уведомление о длительной задаче №"+str(id);
		 msg['From'] = sbss_from_email
		 msg['To'] = m_arr["email"]		 
		 part = MIMEText(html_body, 'html', 'UTF-8')
		 msg.attach(part)
		 s = smtplib.SMTP(sbss_from_server)
		 s.login(sbss_from_email,sbss_from_pass);
		 s.set_debuglevel(1);
		 s.sendmail(sbss_from_email, m_arr["email"], msg.as_string())
		 s.quit()

Изучаем Python. Запросы Mysql

Вот пример программы, для получения данных из БД Mysql. Синтаксис конечно не очень — как то чуть более сложнее по сравнению с PHP. Чуть позже попробую создать класс для работы с MySQL, добавив чуть больше «сахара».

# -*- coding: utf-8 -*-
import mysql.connector
from mysql.connector import Error
                
name='Павел';
print("Hello ",name);

try:
    conn = mysql.connector.connect(host='localhost',database='grib',user='root',password='')
    if conn.is_connected(): print('Вроде соеденился!')
except Error as e:
    print(e);
    exit(0);    

cursor = conn.cursor()
cursor.execute("SELECT * FROM wp_posts");
row = cursor.fetchone()
while row is not None:
    print(row)
    row = cursor.fetchone()
conn.close()

Изучаем Python. Грабли №2

Как оказалось, установив питон, под Windows мы не имеем сразу возможности работать с MySQL. Для этого нужно найти, скачать и установить дополнительный модуль. Поиск по гуглу дал два самых популярных:  MySQLdb и официальный от MySQL . Первый — скачал установил — не заработал. Видимо еще нужно было еще какие-то манипуляции проводить. Второй — заработал сам, сразу после установки. Итак пробуем:

# -*- coding: utf-8 -*-
import mysql.connector
from mysql.connector import Error

def connect():    
    try:
        conn = mysql.connector.connect(host='localhost',database='grib',user='root',password='')
        if conn.is_connected(): print('Вроде соеденился!')
    except Error as e:
        print(e)
    finally:
        conn.close()
        
name='Павел';
print("Hello ",name);
connect();

Установка модулей для работы с MySQL на Ubuntu:

sudo apt-get install python-mysql.connector

FreeBSD:

pkg install py27-mysql-connector-python