Python中的文件处理:被另一个进程使用

Python中的文件处理:被另一个进程使用,python,debugging,python-3.x,logging,file-handling,Python,Debugging,Python 3.x,Logging,File Handling,我制作了这个脚本,它支持记录一些击键,并将它们保存在一个文件中,然后如果用户想删除文件,则删除该文件。然而,当脚本尝试删除该文件时,我得到了这个错误 回溯(最近一次调用上次):文件 “C:\Users\Tormentor\Desktop\S.D.A.K.L\pregunta.py”,第34行,在 os.remove(路径2+“\”+名称)权限错误:[WinError 32]错误 进程无法访问该文件,因为另一个进程正在使用该文件 进程:'C:\Users\Public\myfile.txt' 我做

我制作了这个脚本,它支持记录一些击键,并将它们保存在一个文件中,然后如果用户想删除文件,则删除该文件。然而,当脚本尝试删除该文件时,我得到了这个错误

回溯(最近一次调用上次):文件 “C:\Users\Tormentor\Desktop\S.D.A.K.L\pregunta.py”,第34行,在 os.remove(路径2+“\”+名称)权限错误:[WinError 32]错误 进程无法访问该文件,因为另一个进程正在使用该文件 进程:'C:\Users\Public\myfile.txt'

我做了一些研究,我认为它不能被删除,因为我的“snp”功能从未关闭记录击键的文件,所以我如何才能关闭文件来删除它? 谢谢你的帮助:)

导入操作系统
导入时间
导入pyHook、pythoncom、sys、日志
path=“C:\\Users\\Public\\myfile.txt”
path2=“C:\\Users\\Public”
name=“myfile.txt”
TinM=10
def snp(事件):#time.time():
hooks\u manager=pyHook.HookManager()
hooks\u manager.KeyDown=snp
hooks_manager.HookKeyboard()
打印(“记录击键”)
pythoncom.PumpWaitingMessages()
其他:
hooks_manager.unhookeyboard()
x=输入(“键盘记录器停止,是否要删除存档?是/否”)
如果x==“y”:
对于os.walk(路径2)中的(路径2、目录、文件):
如果文件中有名称:

删除(路径2+“\\”+名称)\文件由您自己的进程保持打开状态

logging.basicConfig(filename=path, level=logging.DEBUG...
打开由
文件名
指定的文件。直到进程退出,或者调用了
logging.shutdown()
,它才会关闭它,因此您可以在
snp()
函数中调用
shutdown()

然而,这要求每次按键时都要初始化日志记录,这是非常低效的。更好的设计是在脚本的主要部分调用一次
logging.basicConfig()
,然后在删除文件之前调用
logging.shutdown()
。然后,您的
snp()
函数变为:

def snp(event):
    logging.log(logging.DEBUG, chr(event.Ascii))
    return True
以及剧本的主要部分:

logging.basicConfig(filename=path, level=logging.DEBUG, format='%(message)s')
timeout=time.time()+TinM
while timeout > time.time():
    hooks_manager = pyHook.HookManager()
    hooks_manager.KeyDown = snp
    hooks_manager.HookKeyboard()
    print("Logging keystrokes")
    pythoncom.PumpWaitingMessages

hooks_manager.UnhookKeyboard()
logging.shutdown()
x=input("Keylogger stoped do you want to delete the archive? y / n")
if x == "y":
    for(path2,dirs,files) in os.walk(path2):
        if name in files:
            os.remove(path2+"\\"+name) # <----- This line triggers the error.
            print("Archive deleted. Goodbye")
        else:
            print("Archive does not exist or cant be found goodbye! :D")
else:
    print("Goodbye! :D")
logging.basicConfig(文件名=路径,级别=logging.DEBUG,格式='%(消息)s')
超时=time.time()+TinM
while timeout>time.time()
hooks\u manager=pyHook.HookManager()
hooks\u manager.KeyDown=snp
hooks_manager.HookKeyboard()
打印(“记录击键”)
pythoncom.PumpWaitingMessages
hooks_manager.unhookeyboard()
logging.shutdown()
x=输入(“键盘记录器停止,是否要删除存档?是/否”)
如果x==“y”:
对于os.walk(路径2)中的(路径2、目录、文件):
如果文件中有名称:

os.remove(path2+“\\\”+name)\\也许文本文件已经在其他地方打开了,比如你的文本编辑器?我已经检查过了,这不是问题所在。你是否在多个控制台中运行脚本?
logging.basicConfig(filename=path, level=logging.DEBUG, format='%(message)s')
timeout=time.time()+TinM
while timeout > time.time():
    hooks_manager = pyHook.HookManager()
    hooks_manager.KeyDown = snp
    hooks_manager.HookKeyboard()
    print("Logging keystrokes")
    pythoncom.PumpWaitingMessages

hooks_manager.UnhookKeyboard()
logging.shutdown()
x=input("Keylogger stoped do you want to delete the archive? y / n")
if x == "y":
    for(path2,dirs,files) in os.walk(path2):
        if name in files:
            os.remove(path2+"\\"+name) # <----- This line triggers the error.
            print("Archive deleted. Goodbye")
        else:
            print("Archive does not exist or cant be found goodbye! :D")
else:
    print("Goodbye! :D")