我正在尝试编写一个简单的应用程序,该应用程序必须读取某个目录中当前打开的所有文件。 更具体地说,我想在我的Documents文件夹中的任何地方打开一个文件列表, 但我不只想要进程的ID或进程名称,我想要打开文件的完整路径。
事情是我还没有发现任何事情。 我既不能在linux shell(使用ps和lsof命令)也不能使用python的psutil库。这些都没有给我提供我需要的信息,这只是目录中当前打开文件的路径。
有什么建议吗?
P.S:我将此标记为python问题(除了os相关标签),因为如果可以使用某个python库完成它将是一个加分。
答案 0 :(得分:0)
这似乎有效(在Linux上):
import subprocess
import shlex
cmd = shlex.split('lsof -F n +d .')
try:
output = subprocess.check_output(cmd).splitlines()
except subprocess.CalledProcessError as err:
output = err.output.splitlines()
output = [line[3:] for line in output if line.startswith('n./')]
# Out[3]: ['file.tmp']
它以非递归方式从当前目录中读取打开的文件。
对于递归搜索,请使用+D
选项。请记住,它很容易受到竞争条件的影响 - 当您获得输出时,情况可能已经发生变化。最好尝试做某事(打开文件),并检查是否有失败,例如打开文件并捕获异常或检查C中的空FILE
值。