у меня для работы есть готовый скрипт на Python 2.7 но старовата уже эта версия, т.к. Python изучать все равно буду но позже так что уже сейчас лучше поставлю Python 3.7 и буду постепенно изучать его
зачем мне регрессировать до 2.7, а этот скрипт написан под 2.7 и в 3.7 работать отказывается а он нужен уже сейчас и срочно помогите пожалуйста его переделать, думаю для профессионалов это будет быстро вот такой вот скрипт:
import mmap import struct import win32event import time import smtplib import sys def ControllerStart(Filter = "Tag", TimeOut = 60): #Создаем объект события готовности буфера для получения отладочных сообщений buffer_ready = win32event.CreateEvent(None, 0, 0, "DBWIN_BUFFER_READY") #Создаем объект события получения данных отладочного сообщения data_ready = win32event.CreateEvent(None, 0, 0, "DBWIN_DATA_READY") #Выделяем память под буфер обмена _buffer = mmap.mmap(0, 4096, "DBWIN_BUFFER", mmap.ACCESS_WRITE) timeStart = time.time() while time.time() < timeStart + int(TimeOut): #Устанавливаем событие готовности буфера для получения отладочных сообщений, #т.е. регистрируем "программу-ловушку" win32event.SetEvent(buffer_ready) #Если есть сигнал получения данных отладочного сообщения – обрабатываем его if win32event.WaitForSingleObject(data_ready, 1) == win32event.WAIT_OBJECT_0: _buffer.seek(0) #Получаем идентификатор процесса, отправившего отладочное сообщение process_id, = struct.unpack("L", _buffer.read(4)) #Считываем отладочное сообщение из буфера обмена data = _buffer.read(4092) #Считываем строку до символа окончания строки, если он присутствует if "\0" in data: str1 = data[:data.index("\0")] #иначе вся строка в буфере является отладочным сообщением else: str1 = data #Проверяем присутствие подстроки Filter в сообщении, #если она присутствует, считаем, что #отладочное сообщение получено от нашего скрипта Lua if str1.find(Filter) >= 0: ticks = time.localtime() #Выводим отладочное сообщение в консоль print ("Pid %d [%02d:%02d:%02d]: %s" % (process_id, ticks.tm_hour, ticks.tm_min, ticks.tm_sec, str1)) timeStart = time.time() #Если в течение установленного таймаута с момента #последнего отладочного сообщения не было получено #новых отладочных сообщений скрипа Lua - отравляем письмо if time.time() >= timeStart + int(TimeOut): SendMail ("Script %s" % Filter) def SendMail(MsgText): #От кого fromaddr = 'Mr. Robot <someaccount@test.com>'' #Кому toaddr = 'Administrator <administrator@test.com>' #Тема письма subj = 'Notification from Controller' #Текст сообщения msg_txt = 'Notice:\n\n ' + MsgText + '\n\nBye!' #Создаем письмо (заголовки и текст) msg = "From: %s\nTo: %s\nSubject: %s\n\n%s" % ( fromaddr, toaddr, subj, msg_txt) #Логин почтового ящика username = 'someaccount' #Пароль почтового ящика password = 'somepassword' #Инициализируем соединение с сервером по протоколу smtp server = smtplib.SMTP("smtp.mail.com:465") #Переводим соединение в защищенный режим (Transport Layer Security) server.starttls() #Авторизуемся на сервере server.login(username, password) #Отправляем письмо server.sendmail(fromaddr, toaddr, msg) print ("Message send to %s" % toaddr) #Закрываем соединение с сервером server.quit() if len(sys.argv) == 1: ControllerStart() elif len(sys.argv) == 2: ControllerStart(sys.argv[1]) elif len(sys.argv) == 3: ControllerStart(sys.argv[1], int(sys.argv[2]))
При попытке выполнения в IDLE Python 3.7 выдает вот такие ошибки:
Traceback (most recent call last):
File “X:\disc.py”, line 82, in <module>
ControllerStart()
File “X:\disc.py”, line 29, in ControllerStart
if “\0” in data:
TypeError: a bytes-like object is required, not ‘str’
Traceback (most recent call last):
File “X:\disc.py”, line 82, in <module>
ControllerStart()
File “X:\disc.py”, line 47, in ControllerStart
if time.time() >= timeStart + int(TimeOut): SendMail (“Script %s” % Filter)
File “X:\disc.py”, line 70, in SendMail
server = smtplib.SMTP(“smtp.mail.com:465”)
File “C:\Python\Python37-32\lib\smtplib.py”, line 251, in __init__
(code, msg) = self.connect(host, port)
File “C:\Python\Python37-32\lib\smtplib.py”, line 338, in connect
(code, msg) = self.getreply()
File “C:\Python\Python37-32\lib\smtplib.py”, line 394, in getreply
raise SMTPServerDisconnected(“Connection unexpectedly closed”)
smtplib.SMTPServerDisconnected: Connection unexpectedly closed