2016-08-24 83 views
0

我使用python shuitl.copy2方法从共享文件夹复制一些文件,复制成功后会启动一个需要访问这些复制文件的进程。 问题有时会出现文件无法被新进程访问,错误32被报告。我的脚本循环运行,但问题不会每次都发生。有人知道问题是什么吗?由python复制的文件不能被其他进程访问

更新一些简单的代码。具体请求触发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' 
+1

错误32本身是相当无意义的,不知道它是如何报告的。在C中,它是“断开的管道”,这意味着它是错误的文件复制以外的东西。请显示一些代码和错误的完整追溯。 – cdarke

回答

0

文件指针可能没有正确关闭。

也许在复制和过程的开始之间添加一点time.sleep()

+0

感谢您的回复。我已经试过了,但这个解决方案还没有工作。我已经尝试添加一些日志来跟踪复制线程,日志显示线程正常结束。 – user2645424

0

我明白了!发生这个问题是因为复制线程处理文件期间由父进程创建的另一个进程。所以一个复制文件的文件句柄被传递给新进程,并且新进程继续处理文件句柄直到它结束。所以在运行过程中,文件不能被其他应用程序访问。而已。

相关问题