2016-08-24 86 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

我明白了!發生這個問題是因爲複製線程處理文件期間由父進程創建的另一個進程。所以一個複製文件的文件句柄被傳遞給新進程,並且新進程繼續處理文件句柄直到它結束。所以在運行過程中,文件不能被其他應用程序訪問。而已。

相關問題