0

以下のコードを使用してソースコードツリーをコピーしようとすると、エラーが発生します。なぜこれが発生するのかわかりません。エラーは、\\ Ref \ builds / outは存在しますが、存在しません。「out」はディレクトリです。スクリプトがコピーしようとしているソースの場所、shutilがこのタイプのコピーに適していない場合にコピーを行う他の方法はありますか?

//local/mnt/workspace/04.01_HY11/out
\\Ref\builds/out
copying
Traceback (most recent call last):
  File "test.py", line 21, in <module>
    main()
  File "test.py", line 18, in main
    copytree(src,dst)
  File "test.py", line 11, in copytree
    shutil.copytree(s, d)
  File "/pkg/qct/software/python/2.5.2/.amd64_linux26/lib/python2.5/shutil.py", line 110, in copytree
    os.makedirs(dst)
  File "/pkg/qct/software/python/2.5.2/.amd64_linux26/lib/python2.5/os.py", line 171, in makedirs
    mkdir(name, mode)
OSError: [Errno 17] File exists: '\\\\Ref\\builds/out'

Pythonコード

import os,shutil

def copytree(src, dst, symlinks=False, ignore=None):
    for item in os.listdir(src):
        s = os.path.join(src, item)
        print s
        d = os.path.join(dst, item)
        print d
        if os.path.isdir(s):
            print "copying"
            shutil.copytree(s, d, symlinks, ignore)
        else:
            shutil.copy2(s, d)
def main ():
    src="//local/mnt/workspace/04.01_HY11"
    dst="\\\\Ref\\builds"
    copytree(src,dst)

if __name__ == '__main__':
    main()
4

1 に答える 1

1

ドキュメントshutil.copytreeには、次のように明確に記載されています。

で指定された宛先ディレクトリは、dstすでに存在していてはなりません。親ディレクトリが欠落しているだけでなく、作成されます。

しかし、\\ref\builds\outすでに存在しています。例外のスタックトレースから、mkdirそのパスを試行していることがわかりますが、そのパスがすでに存在することを示すエラーで失敗しています(パスが通常のファイルまたはディレクトリとして存在する場合に発生する可能性があります)。

別のパスを選択するか、最初にその場所にある既存のツリーを削除することにより、まだ存在していないパスにコピーする必要があります。後者はで行うことができますshutil.rmtree

于 2013-01-05T21:32:17.187 に答える