Форум сайта python.su
31
Здравствуйте…
Подскажите как при изменении переменной в цикле for выполнить условие одно или другое в зависимости от того изменился ли параметр(переменная)
a = os.popen("ipconfig /all ")
for line in a.readlines():
print linesp.append(line)
b=str(sp)
print b
# -*- coding: cp1251 -*-
import os
import smtplib
from email.MIMEText import MIMEText
import time
while True:
sp=""
a = os.popen("ipconfig /all ")
for line in a.readlines():
sp+=line
# отправитель
me = 'sanodin@yandex.ua'
# получатель
you = 'sanodin@yandex.ua'
# текст письма
text = sp
#text = unicode(text, "cp1251").encode("koi8-r")
# заголовок письма
subj = 'Отчет ip'
# параметры SMTP-сервера
server = "213.180.204.38" # "smtp.yandex.ua"
port = 25
user_name = "sanodin"
user_passwd = "xxxxxxx"
# формирование сообщения
msg = MIMEText(text, "", "cp1251")
msg['Subject'] = subj
msg['From'] = me
msg['To'] = you
# отправка
s = smtplib.SMTP(server, port)
s.starttls()
s.login(user_name, user_passwd)
s.sendmail(me, you, msg.as_string())
s.quit()
time.sleep(60)
Отредактировано sanodin (Июнь 1, 2012 20:39:43)
Офлайн
52
Запишите в файл.
Офлайн
31
В файл запишу, а как его проверять?В батнике такая проверка выглядела так:
ipconfig /all > 1.new.txt
set sendIP=1
if exist 1.txt (
fc /b 1.txt 1.new.txt >nul && set sendIP=0
del /f /q 1.txt
)
ren 1.new.txt 1.txt
if %sendIP%==1 (
blat.exe 1.txt -to sanodin@yandex.ru
if not %errorlevel%==0 del /f /q 1.txt
)
Отредактировано sanodin (Июнь 1, 2012 20:56:17)
Офлайн
52
while True: old_ip = read(file) current_ip = read('ipconfig') if old_ip != current_ip: send_mail('old_ip changed to current_ip') store(current_ip) sleep(10)
Отредактировано fata1ex (Июнь 1, 2012 21:25:01)
Офлайн
31
fata1exwhile True: old_ip = read(file) current_ip = read('ipconfig') if old_ip != current_ip: send_mail('old_ip changed to current_ip') store(current_ip) sleep(10)
?
Офлайн
857
sanodinприведи вывод ipconfig /all
Подскажите как при изменении переменной в цикле for выполнить условие одно или другое в зависимости от того изменился ли параметр(переменная)
Отредактировано py.user.next (Июнь 2, 2012 10:16:12)
Офлайн
31
py.user.nextsanodinприведи вывод ipconfig /all
Подскажите как при изменении переменной в цикле for выполнить условие одно или другое в зависимости от того изменился ли параметр(переменная)
и пример того, что нужно сравнить
Настройка протокола IP для Windows
Имя компьютера . . . . . . . . . : best-e87b585a9d
Основной DNS-суффикс . . . . . . :
Тип узла. . . . . . . . . . . . . : неизвестный
IP-маршрутизация включена . . . . : да
WINS-прокси включен . . . . . . . : нет
Подключение по локальной сети - Ethernet адаптер:
DNS-суффикс этого подключения . . :
Описание . . . . . . . . . . . . : Realtek RTL8168/8111 PCI-E Gigabit Ethernet NIC
Физический адрес. . . . . . . . . : 00-1D-92-60-06-FC
Dhcp включен. . . . . . . . . . . : нет
IP-адрес . . . . . . . . . . . . : 192.168.0.1
Маска подсети . . . . . . . . . . : 255.255.255.0
Основной шлюз . . . . . . . . . . :
Utel - PPP адаптер:
DNS-суффикс этого подключения . . :
Описание . . . . . . . . . . . . : WAN (PPP/SLIP) Interface
Физический адрес. . . . . . . . . : 00-53-45-00-00-00
Dhcp включен. . . . . . . . . . . : нет
IP-адрес . . . . . . . . . . . . : xx.203.172.84
Маска подсети . . . . . . . . . . : 255.255.255.255
Основной шлюз . . . . . . . . . . : xx.203.172.xx
DNS-серверы . . . . . . . . . . . : 213.179.249.151
213.179.249.152
Основной WINS-сервер . . . . . . : 10.11.12.13
Дополнительный WINS-сервер. . . . : 10.11.12.14
NetBIOS через TCP/IP. . . . . . . : отключен
Отредактировано sanodin (Июнь 2, 2012 13:59:55)
Офлайн
31
Рабочий вариант кода…прошу дать советы по оптимизации и указать на ошибки
# -*- coding: cp1251 -*-
import os
import smtplib
from email.MIMEText import MIMEText
import time
sp=""
a = os.popen("ipconfig /all ")
for line in a.readlines():
sp+=line
file=open('1.txt','wb')
file.write(sp)
file.close()
# отправитель
me = 'sanodin@yandex.ua'
# получатель
you = 'sanodin@yandex.ua'
# текст письма
text = sp
#text = unicode(text, "cp1251").encode("koi8-r")
# заголовок письма
subj = 'Отчет ip'
# параметры SMTP-сервера
server = "213.180.204.38" # "smtp.yandex.ua"
port = 25
user_name = "sanodin"
user_passwd = "xxxxx"
# формирование сообщения
msg = MIMEText(text, "", "cp1251")
msg['Subject'] = subj
msg['From'] = me
msg['To'] = you
# отправка
try:
s = smtplib.SMTP(server, port)
s.starttls()
s.login(user_name, user_passwd)
s.sendmail(me, you, msg.as_string())
s.quit()
except StandardError, exc:
pass
while True:
def ttt():
so=""
k = os.popen("ipconfig /all ")
for lin in k.readlines():
so+=lin
return so
def mail(so):
# отправитель
me = 'sanodin@yandex.ua'
# получатель
you = 'sanodin@yandex.ua'
# текст письма
text = so
#text = unicode(text, "cp1251").encode("koi8-r")
# заголовок письма
subj = 'Отчет ip'
# параметры SMTP-сервера
server = "213.180.204.38" # "smtp.yandex.ua"
port = 25
user_name = "sanodin"
user_passwd = "xxxxxx"
# формирование сообщения
msg = MIMEText(text, "", "cp1251")
msg['Subject'] = subj
msg['From'] = me
msg['To'] = you
try:
s = smtplib.SMTP(server, port)
s.starttls()
s.login(user_name, user_passwd)
s.sendmail(me, you, msg.as_string())
s.quit()
except StandardError, exc:
pass
fil=open('1.txt','rb')
old_ip = fil.read()
fil.close()
current_ip = ttt()
if old_ip != current_ip:
mail(ttt())
file=open('1.txt','wb')
file.write(ttt())
file.close()
time.sleep(20)
Офлайн
18
если программа не закрывается можно не сохранять данные в файл
while True: def ttt(): ... def mail(so):
def ttt(): so="" k = os.popen("ipconfig /all ") for lin in k.readlines(): so+=lin return so
def ttt(): return os.popen("ipconfig /all ").read()
Отредактировано sp3 (Июнь 2, 2012 15:48:44)
Офлайн
52
+
Посмотрите на subprocess, контекстные менеджеры, pep8 и comprehensions.
Например:
sp="" a = os.popen("ipconfig /all ") for line in a.readlines(): sp+=line
sp = ''.join(a.readlines())
Отредактировано fata1ex (Июнь 2, 2012 15:57:16)
Офлайн