shutil.copytree因FileExistsError而失败:[WinError 183]当该文件已存在时无法创建文件

时间:2018-03-26 15:53:36

标签: python windows filesystems

我在Windows上有以下简单的Python脚本:

import os.path
import shutil

src = os.path.join("..", "_build")
dst = "_build"
print("Copying {} to {}".format(src, dst))
if not os.path.exists(dst):
    shutil.copytree(src, dst)
    print("Copied {} to {}".format(src, dst))
else:
    print("{} already exists".format(dst))

当我跑步时,我收到以下错误:

>python copytreetest.py
Copying ..\_build to _build
Traceback (most recent call last):
  File "copytreetest.py", line 9, in <module>
    shutil.copytree(src, dst)
  File "C:\Program Files\Python36\lib\shutil.py", line 315, in copytree
    os.makedirs(dst)
  File "C:\Program Files\Python36\lib\os.py", line 220, in makedirs
    mkdir(name, mode)
FileExistsError: [WinError 183] Cannot create a file when that file already exists: '_build'

这是一个截图,显示目的地&#34; _build&#34;事实上确实不存在:

windowsbug

如果我从&#34; _build&#34;更改目的地到&#34; _build2&#34;然后我没有收到错误:

>python copytreetest.py
Copying ..\_build to _build2
Copied ..\_build to _build2

这到底是怎么回事?为什么Windows在一个实例中(在存在调用期间)表示目标不存在,而在另一个实例中(在mkdir调用期间)表示目标存在。我可以在这里遇到哪个Windows错误?我正在运行Windows Server 2016版本1607。

编辑:我发现错误是因为我在_build目录中打开了一个终端。我想某种程度上存在冲突,你可以删除终端已打开的目录,但不能创建另一个具有相同名称的目录(即使它似乎不存在)。这显然令人困惑,所以我会在这里留下这个问题,万一有人遇到同样的问题。

0 个答案:

没有答案