ファイルの内容が他のプロセスによって書き込まれているかどうかを検出したいファイル。 これはWindows上にあり、Python(2.7.x)を使用しています。他のプロセスで使用中のファイルが同じ名前に変更しようとしているかどうかを調べる(WindowsのPythonで)
(ちなみに、Pythonスクリプトは、指定されたフォルダに置かれたファイルに対して動作するサービスを提供しています。検出されるとすぐにファイルに作用し、そのファイルを処理した後にファイルを削除します私は、部分的にしか書かれていないファイルに作用したくない)。
私は、ファイルが同じ名前に変更しようとすると、プロセス)、ファイルが別のプロセスで使用されていない場合は(null-opとして)成功します。このような 何か:
def isFileInUse(filePath):
try:
os.rename(filePath, filePath)
return False
except Exception:
return True
送信元と送信先が同じであるとき、私はos.renameの行動についての文書化は何を見ていません。 誰かが私が上でやっていることで間違っているかもしれない何かを知っていますか?
私は、Windowsで動作する解決策、 を探していますが、os.accessが機能していないことに注意してください。os.W_OKでもファイルが別のファイルによって書き込まれていてもTrueを返しますプロセス。
上記の解決策(同じ名前に名前を変更)に関して素晴らしいことの1つは、それが原子であることです。これは、一時名に名前を変更して元の名前に戻すと真ではありません。
これはこれを行うための逆の方法のようです。ファイルを書き込むプログラムは、一時名に書き込む必要があります。それが終わったら、実際の名前に変更してください。 – Barmar
チェックを実行した直後に誰かが書き込みを開始した場合、ファイルが開かれている別のステップとしてファイルが使用されているかどうかを検出しようとすると競合状態になりがちです。 – user2357112
これはあなたの質問に役立つトピックかもしれません:http://stackoverflow.com/questions/11114492/check-if-a-file-is-not-open-not-used-by-other-process-in-python –