Python を使用して、システム全体 (Linux) で開いているファイルを特定する方法を探しています。これを行うモジュールが見つかりません。
それとも、コマンド lsof を使用するのが唯一の方法でしょうか?
2018 年 4 月現在の最新バージョンの更新psutil
:
の新しいバージョンでは、ドキュメントの次の例に示すように、psutil
これに対してわずかに異なる関数名が使用されるようになりました。open_files
>>> import psutil
>>> f = open('file.ext', 'w')
>>> p = psutil.Process()
>>> p.open_files()
[popenfile(path='/home/giampaolo/svn/psutil/file.ext', fd=3)]
元の回答/の古いバージョンpsutil
:
psutil python モジュール (PyPI で利用可能) のドキュメントを見ると、特定のプロセスで開いているファイルをチェックするメソッドが見つかります。関連するスタック オーバーフロー レスポンスで説明されているように、すべてのアクティブな PID のリストを取得することをお勧めします。次に、以下の方法を使用します。
get_open_files() プロセスによって開かれた通常のファイルを、ファイルの絶対パス名とファイル記述子を含む名前付きタプルのリストとして返します。例:
>>> f = open('file.ext', 'w')
>>> p = psutil.Process(os.getpid())
>>> p.get_open_files()
[openfile(path='/home/giampaolo/svn/psutil/file.ext', fd=3)]
0.2.1 で変更: C で書き直された OSX 実装。lsof は不要になりました。0.4.1 で変更: C で書き直された FreeBSD 実装。lsof は不要になりました。
編集: アクティブな PID を反復処理するために、psutil には別の方法があります (上記のスタック オーバーフロー応答でも参照されています)。
psutil.process_iter()
ローカル マシンで実行中のすべてのプロセスの Process クラス インスタンスを生成する反復子を返します。すべての新しい Process インスタンスは一度だけ作成され、使用されるたびに更新される内部テーブルにキャッシュされます。