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

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

董意蕴
2023-03-14

我正在测试一个python代码,它将文件从源路径移动到目标路径。测试是使用Python3中的pytest完成的。但我在这里面临着一个障碍。就是这样,我试图在代码结束时删除源路径和目标路径。为此,我使用了类似shutil的命令。rmtree(路径)或操作系统。rmdir(路径)。这导致了错误-“[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

执行代码时,会弹出以下错误:

[WinError32]进程无法访问该文件,因为另一个进程正在使用它:“C:\Users\xyz\AppData\Local\Temp\tmptryggg56”

共有1个答案

斜高翰
2023-03-14

您会出现这个错误,因为您试图删除的目录是进程的当前目录。如果您在调用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
 类似资料: