2016-08-24 7 views
0

Я использую метод python shuitl.copy2, чтобы скопировать какой-либо файл из папки общего доступа, после успеха копирования начнется процесс, который должен получить доступ к этому скопированному файлу. Вопрос иногда может быть недоступен для нового процесса, Сообщается об ошибке 32. Мой скрипт работает циклически, но проблема не возникает каждый раз. Кто-нибудь знает, в чем проблема?Файл, скопированный с помощью python, не может быть доступен другим процессом

Обновите некоторые простые коды. Конкретный запрос вызывает запуск MyThread, после окончания копирования другое приложение, используемое для использования, будет использовать эти файлы и отчет Appliciton 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

Я понял! Проблема возникла из-за другого процесса, созданного родительским процессом во время копирования файлов с копированием. поэтому дескриптор файла одного скопированного файла передается новому процессу, а новый процесс обрабатывает дескриптор файла до его завершения. Таким образом, во время выполнения процесса доступ к файлам другими приложениями невозможен. Вот и все.