Python程序错误-进程无法访问该文件,因为它正被另一个进程使用

dluptydi  于 2023-05-02  发布在  Python
关注(0)|答案(2)|浏览(222)

我试图测试一个python代码,它将文件从源路径移动到目标路径。这个测试是在Python3中使用pytest完成的。但我现在遇到了障碍。这是,我试图删除源和目标路径在代码完成结束。为此,我使用了一个类似shutil的命令。rmtree(path)或os。rmdir(path)。这导致我的错误-“[WinError 32]该进程无法访问该文件,因为它正在被另一个进程使用”。请在这件事上帮助我。下面是python pytest代码:

import pytest
import os
import shutil
import tempfile

from sample_test_module import TestCondition
object_test_condition = TestCondition()

@pytest.mark.parametrize("test_value",['0'])
def test_condition_pass(test_value):
    temp_dir = tempfile.mkdtemp()
    temp_src_folder = 'ABC_File'
    temp_src_dir = os.path.join(temp_dir , temp_src_folder)
    temp_file_name = 'Sample_Test.txt'
    temp_file_path = os.path.join(temp_src_dir , temp_file_name)
    os.chdir(temp_dir)
    os.mkdir(temp_src_folder)
    
    try:
       with open(temp_file_path , "w") as tmp:
           tmp.write("Hello-World\n")
           tmp.write("Hi-All\n")
    except IOError:
        print("Error has occured , please check it.")
    org_val = object_test_condition.sample_test(temp_dir)
    print("Temp file path is : " + temp_file_path)
    print("Temp Dir is : " + temp_dir)
    shutil.rmtree(temp_dir)
    print("The respective dir path is now removed.)
    assert org_val == test_value

在执行代码时,弹出以下错误:
[WinError 32]进程无法访问该文件,因为它正被另一个进程使用:'C:\Users\xyz\AppData\Local\Temp\tmptryggg56'

r8uurelv

r8uurelv1#

您得到此错误是因为您试图删除的目录是进程的当前目录。如果在调用os.chdir之前保存当前目录(使用os.getcwd()),并在删除temp_dir之前将chdir保存回该目录,则应该可以工作。
您的代码没有正确地缩进,因此我对它应该是什么样子的最佳猜测如下。

import pytest
import os
import shutil
import tempfile

from sample_test_module import TestCondition
object_test_condition = TestCondition()

@pytest.mark.parametrize("test_value",['0'])
def test_condition_pass(test_value):
    temp_dir = tempfile.mkdtemp()
    temp_src_folder = 'ABC_File'
    temp_src_dir = os.path.join(temp_dir , temp_src_folder)
    temp_file_name = 'Sample_Test.txt'
    temp_file_path = os.path.join(temp_src_dir , temp_file_name)
    prev_dir = os.getcwd()
    os.chdir(temp_dir)
    os.mkdir(temp_src_folder)

    try:
       with open(temp_file_path , "w") as tmp:
           tmp.write("Hello-World\n")
           tmp.write("Hi-All\n")
    except IOError:
        print("Error has occured , please check it.")

    org_val = object_test_condition.sample_test(temp_dir)
    print("Temp file path is : " + temp_file_path)
    print("Temp Dir is : " + temp_dir)
    os.chdir(prev_dir)
    shutil.rmtree(temp_dir)
    print("The respective dir path is now removed.)
    assert org_val == test_value
vc9ivgsu

vc9ivgsu2#

删除前可以尝试关闭temp文件吗
temp.close()

相关问题