特定のファイルを開いているプロセス、ユーザー、またはPCを見つける必要があります。winサーバーに付属しているユーティリティを使用して手動で実行できますが、何百ものファイルを処理しているため、これをスクリプト化したいと思います。
何かアイデア、提案をお願いしますか?
基本的に以下の情報のリスト:
特定のファイルを開いているプロセス、ユーザー、またはPCを見つける必要があります。winサーバーに付属しているユーティリティを使用して手動で実行できますが、何百ものファイルを処理しているため、これをスクリプト化したいと思います。
何かアイデア、提案をお願いしますか?
基本的に以下の情報のリスト:
この情報を取得するには、文書化されていない Win32 API が必要です。handle.exe
それらを使用する sysinternalsなどから呼び出すこともできますがpsutil
、PyPi から入手できるモジュールを使用することをお勧めします。これは、使用中のすべてのファイルを一覧表示するサンプル コード (Py3) です。変更できるはずです。
import psutil
for proc in psutil.process_iter():
try:
flist = proc.get_open_files()
if flist:
print(proc.pid,proc.name)
for nt in flist:
print("\t",nt.path)
except psutil.NoSuchProcess as err:
print("****",err)
この種のクエリでは、競合状態が発生する可能性が常にあることに注意してください。プロセスがファイルを開いたり閉じたりする時点、または開始して終了する時点さえわかりません。
PS: Python 3 を使用している場合、psutil のインストールに問題がありましたが、setup.py で 2to3 変換ユーティリティを使用すると問題が解決しました。