[英]Check for open files with Python in Linux
我正在尋找一種方法來確定使用 Python 在我的整個系統 (Linux) 中打開了哪些文件。 我找不到任何執行此操作的模塊。
或者也許唯一的方法是使用命令 lsof?
截至 2018 年 4 月更新psutil
更新版本:
較新版本的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 實例只創建一次,然后緩存到一個內部表中,每次使用時都會更新該表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.