2016-08-24 22 views
0

私はpython shuitl.copy2メソッドを使って共有フォルダからファイルをコピーします。コピーが成功すると、これらのコピーされたファイルにアクセスする必要があります。 質問には、新しいプロセスでファイルにアクセスできない場合があります。エラー32が報告されています。スクリプトは循環して実行されていますが、問題は毎回発生しません。誰が問題が何であるか知っていますか?pythonでコピーされたファイルは別のプロセスからアクセスできません

いくつかの簡単なコードを更新してください。特定の要求トリガーMyThreadが実行され、コピー終了後、別の実行可能なアプリケーションがこれらのファイルを使用し、アプリケーション32がエラー32を報告します。

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では、それは "broken pipe"です。これは、faultでファイルコピー以外のものであることを意味します。いくつかのコードとエラーの完全なトレースバックを表示してください。 – cdarke

答えて

0

ファイルポインタが適切に閉じられていない可能性があります。

コピーとプロセスの開始の間に少しtime.sleep()を追加することがあります。

+0

お返事ありがとうございます。私はすでにそれを試みましたが、この解決策はまだ動作していません。私はコピースレッドを追跡するためにいくつかのログを追加しようとしました、ログはスレッドが正常に終了したことを示します。 – user2645424

0

私はそれを得ました!この問題は、コピースレッド中に親プロセスによって作成された別のプロセスがファイルをコピーするために発生しました。コピーされたファイルのファイルハンドルは新しいプロセスに渡され、新しいプロセスはファイルハンドルが終了するまでそのファイルハンドルを処理し続けます。そのため、実行中のプロセスでは、他のアプリケーションからファイルにアクセスすることはできません。それでおしまい。

関連する問題