2010-12-21 12 views
0

私はのコードを探していますが、ファイルシステム内のファイルが利用可能かどうかをチェックします。(他のプロセスでは使用されていません)。どのように私はPythonでそれを行うことができますか?ありがとう!Pythonでファイルが利用可能かどうかチェックする

私はどのように使用するのですか:ファイルが利用可能かどうかを確認し、利用可能な場合は(プロセスはそれ以上必要ない)削除してください。

+1

プロセスAとプロセスBはファイルを使用している間ロックし、プロセスCはファイルを削除してA&Bの両方が完了したことを知るためにポーリングする予定ですか?これは競合状態になっています。プロセスAが終了し、ファイルが解放され、次にCがタイムスライスされ、ファイルが削除され、Bがタイムスライスされ、ファイルを使用してブームになります。 – mtrw

+0

@mtrw良い点です。しかし、私の場合はそれほど複雑ではありません。ファイルを使用するプロセスは1つだけです。 – bluish

答えて

2
while True: 
    try: 
     os.remove(yourfilename) # try to remove it directly 
    except OSError as e: 
     if e.errno == errno.ENOENT: # file doesn't exist 
      break 
     time.sleep(5) 
    else: 
     break 
+1

+1。厄介な問題への厄介な解決策。もちろん、これはファイル*が* locked/non-deletableであると仮定しています。ファイルの削除が「ファイルが処理された」ことを意味する場合は、whoops!私はそれ以上のことを私が跳ぶことはできないだろう。 –

0

ファイル他のプロセスがファイルを開いているし、あなたがそれを削除すると、すべてのプロセスがそれに自分のハンドルを閉じるまで、それはファイルシステムから削除されることはありません。

他のプロセスがファイルハンドル/オブジェクトを処理する必要がある場合は、ファイルを安全に削除することができますが、プロセスがハンドルを閉じると削除されます。プロセスが終了するまでファイルに対してopen()を呼び出せるようにするには、両方のプロセスがロックを使用する必要があります(fcntl.flock()を参照)。

0

あなたがLinuxで動作しているかどうか不明です。私はあなたが探しているのは、Pythonで 'fuser'のような機能を実装することだと思います。

Linuxの場合は、プロセスIDを '/ proc'ファイルシステムで繰り返し、これらのプロセスが参照するファイルを確認できます。 このスクリプトを確認してくださいfuser.py。同じアプローチを使用して、上記のコードをニーズに合わせることができます。

+0

ありがとう!実際に私はWindows上で作業しています(残念ながら!)が、あなたの答えがLinuxユーザーの一部に役立つことを願っています。 – bluish

関連する問題