PYTEST删除了我的文档文件夹中的所有内容。我可以恢复吗?

时间:2020-07-28 17:31:08

标签: pytest

我一直遵循pytest文档中的教程来创建临时目录https://docs.pytest.org/en/stable/tmpdir.html,当我执行以下代码时,整个documents文件夹的内容都被删除了。

import pytest
import os

@pytest.fixture()
def tmdirmak(tmpdir_factory):
    f = tmpdir_factory.mktemp("data")
    return f

def test_temp(tmp_path):
    d = tmp_path / "sub1"
    d.mkdir()
    p = d / "tem.txt"
    p.write_text("hello")
    assert p.read_text() == "hello"

    os.system("ls")

此文件保存在我的documents文件夹中,这是我运行命令pytest --basetemp=. -s test_paths.py 的地方,根据文档的说明,这是您更改临时目录的位置的方式。我不希望在/ tmp中创建临时目录,而是希望在代码存在的同一目录中创建临时目录。运行此命令时,我得到以下pytest输出

test_paths.py E

================================================= ERRORS ==================================================
_______________________________________ ERROR at setup of test_temp _______________________________________

path = '/Users/matthewclark/Documents', ignore_errors = False
onerror = functools.partial(<function on_rm_rf_error at 0x7fe29a845dd0>, start_path=PosixPath('/Users/matthewclark/Documents'))

    def rmtree(path, ignore_errors=False, onerror=None):
        """Recursively delete a directory tree.
    
        If ignore_errors is set, errors are ignored; otherwise, if onerror
        is set, it is called to handle the error with arguments (func,
        path, exc_info) where func is platform and implementation dependent;
        path is the argument to that function that caused it to fail; and
        exc_info is a tuple returned by sys.exc_info().  If ignore_errors
        is false and onerror is None, an exception is raised.
    
        """
        if ignore_errors:
            def onerror(*args):
                pass
        elif onerror is None:
            def onerror(*args):
                raise
        if _use_fd_functions:
            # While the unsafe rmtree works fine on bytes, the fd based does not.
            if isinstance(path, bytes):
                path = os.fsdecode(path)
            # Note: To guard against symlink races, we use the standard
            # lstat()/open()/fstat() trick.
            try:
                orig_st = os.lstat(path)
            except Exception:
                onerror(os.lstat, path, sys.exc_info())
                return
            try:
                fd = os.open(path, os.O_RDONLY)
            except Exception:
                onerror(os.lstat, path, sys.exc_info())
                return
            try:
                if os.path.samestat(orig_st, os.fstat(fd)):
                    _rmtree_safe_fd(fd, path, onerror)
                    try:
>                       os.rmdir(path)
E                       PermissionError: [Errno 13] Permission denied: '/Users/matthewclark/Documents'

../anaconda3/lib/python3.7/shutil.py:496: PermissionError

During handling of the above exception, another exception occurred:

path = '/Users/matthewclark/Documents', ignore_errors = False
onerror = functools.partial(<function on_rm_rf_error at 0x7fe29a845dd0>, start_path=PosixPath('/Users/matthewclark/Documents'))

    def rmtree(path, ignore_errors=False, onerror=None):
        """Recursively delete a directory tree.
    
        If ignore_errors is set, errors are ignored; otherwise, if onerror
        is set, it is called to handle the error with arguments (func,
        path, exc_info) where func is platform and implementation dependent;
        path is the argument to that function that caused it to fail; and
        exc_info is a tuple returned by sys.exc_info().  If ignore_errors
        is false and onerror is None, an exception is raised.
    
        """
        if ignore_errors:
            def onerror(*args):
                pass
        elif onerror is None:
            def onerror(*args):
                raise
        if _use_fd_functions:
            # While the unsafe rmtree works fine on bytes, the fd based does not.
            if isinstance(path, bytes):
                path = os.fsdecode(path)
            # Note: To guard against symlink races, we use the standard
            # lstat()/open()/fstat() trick.
            try:
                orig_st = os.lstat(path)
            except Exception:
                onerror(os.lstat, path, sys.exc_info())
                return
            try:
                fd = os.open(path, os.O_RDONLY)
            except Exception:
                onerror(os.lstat, path, sys.exc_info())
                return
            try:
                if os.path.samestat(orig_st, os.fstat(fd)):
                    _rmtree_safe_fd(fd, path, onerror)
                    try:
                        os.rmdir(path)
                    except OSError:
>                       onerror(os.rmdir, path, sys.exc_info())
E                       PermissionError: [Errno 13] Permission denied: '/Users/matthewclark/Documents'

../anaconda3/lib/python3.7/shutil.py:498: PermissionError
============================================ 1 error in 0.21s =============================================

我想回来是为了找到我在documents目录中要删除的所有文件夹和文档!我怀疑,因为pytest通常认为它在/ tmp中,所以它只是在完成后清除该文件夹中的所有内容,包括未创建的内容。如果这是真的,那就是一个可怕的错误。奇怪的是我收到了这些权限错误,但是我的内容还是被删除了。

0 个答案:

没有答案