Архив рубрики: Python

Python. Получение списка IP по hostname

Задача: по извесному доменному имени получить список его IP адресов

Решение:

#!/usr/bin/python
# coding=utf-8
import sys
import socket
import dns.resolver

site = "www.google.com"
dns_server = "8.8.8.81"

try:
    resolver = dns.resolver.Resolver()
    resolver.nameservers = [socket.gethostbyname(dns_server)]
    resolver.timeout = 1
    resolver.lifetime = 1
    answer = resolver.query(site, 'A');
    for rdata in answer :
        print rdata.address
except:
    print "Ошибка получения списка IP";

Python и Mysql — получение последнего вставленного ID

Ну проще всего показать на примере:

def InsertUserToForpost(connf,login,passw):
    putlog("*добавляем учетку в Форпост "+str(login));    
    sql="insert into User (ID,IsActive,CanChangeOwnInfo,CreationDate,Login,Password,TypeId) values (null,1,1,now(),%s,MD5(%s),2);";
    cursor = connf.cursor(dictionary=True,buffered=True)
    cursor.execute(sql,[login,passw]);
    connf.commit()
    #получаем ID
    lid=conf.insert_id()
    sql="insert into AccountUser (ID,UserID,AccountID,IsReadOnly) VALUES (null,%s,1,1);";
    cursor = connf.cursor(dictionary=True,buffered=True)
    cursor.execute(sql,[lid]);

Python проверка существования ключа

Для того чтобы подобный код:

if child_of_root.attrib["BlockType"]=="domain":

не выдавал ошибок при отсутствии ключа, лучше пользоваться такой конструкцией:

if "blockType" in child_of_root.attrib:
  if child_of_root.attrib["BlockType"]=="domain":

Python нормализация даты полученной из MySQL

Формат даты MySQL и Python несколько отличаются, поэтому не получится результат запроса — дату, использовать сразу. Нужно предварительно её отформатировать при помощи функции strptime(дата, формат). Вот пример кода:

        sql="select count(*) as cnt,(now()-interval %s day) as ddy  from payments where mod_person=%s and year(pay_date)=year(now()-interval %s day) and month(pay_date)=month(now()-interval %s day) and day(pay_date)=day(now()-interval %s day)";
        cursor2=connb.cursor(dictionary=True,buffered=True)
	cursor2.execute(sql,[days,person_id,days,days,days]);
	myrow3 = cursor2.fetchone()	
	while myrow3 is not None:    
	    cnt=myrow3["cnt"];   
            ddy=myrow3["ddy"];   	    
	    ddt=datetime.datetime.strptime(str(ddy),"%Y-%m-%d %H:%M:%S")
	    wd=datetime.datetime.weekday(ddt);    
	    if wd==0:dn="Понедельник";
	    if wd==1:dn="Вторник";
	    if wd==2:dn="Среда";
	    if wd==3:dn="Четверг";
	    if wd==4:dn="Пятница";
	    if wd==5:dn="Суббота";
	    if wd==6:dn="Воскресенье";
	    #Если платежей нет в выходные, тогда АХТУНГ!!
            if ((cnt==0) and (wd!=5) and (wd!=6)):
               func.putlog (str(email.encode('utf-8'))+" Внимание! В биллинге нет платежей за "+str(ddy)+" ("+str(wd)+") от "+str(name.encode('utf-8'))+"!!")
	       func.AddMailQwery(noc,'цувцу@цувцув.ru',email,"Внимание! В биллинге нет платежей за "+str(ddy)+" ("+str(wd)+") от "+str(name.encode('utf-8'))+"!!","Внимание! В биллинге нет платежей за "+str(ddy)+" ("+str(wd)+") от "+str(name.encode('utf-8'))+"!!");
                   #SendMailAttachment($email,$cfg->smtpusername,"Внимание! В биллинге нет платежей за $ddy ($dn) от $name!!!","Внимание! В биллинге нет платежей за $ddy ($dn) от $name!!!");                                                             
	    myrow3 = cursor2.fetchone()