我使用python shuitl.copy2 方法从共享文件夹中复制一些文件,复制成功后会启动一个需要访问这些复制文件的进程。 问题有时新流程无法访问文件,报告错误32 。我的脚本循环运行,但每次都不会发生这个问题。有谁知道问题是什么?
更新一些简单的代码。特定请求触发 MyThread 运行,在复制结束后,另一个可删除的应用程序将使用这些文件和应用程序报告Error32。
class MyThread(threading.Thread):
def __init__(self, fileList, destFolder):
threading.Thread.__init__(self)
def run(self):
for fileItem in self.fileList:
if self.stop:
break
try:
self.__copyFile(fileItem, localDestFolder)
self.successList.append(fileItem)
except Exception, e:
self.errorList.append((fileItem, str(e)))
@staticmethod
def __copyFile(source, destination):
print 'Use shutil to copy file %s' % source
shutil.copy2(source, destination)
print 'Copy end'
答案 0 :(得分:0)
文件指针可能未正确关闭。
也许在副本和流程开始之间添加一点time.sleep()
。
答案 1 :(得分:0)
我明白了!问题发生的原因是在复制线程处理文件期间由父进程创建的另一个进程。因此,一个复制文件的文件句柄将传递给新进程,新进程将继续处理文件句柄,直到结束。因此,在进程运行期间,其他应用程序无法访问该文件。就是这样。