获取当前打开文件的完整路径

时间:2014-04-06 20:26:02

标签: python linux shell process operating-system

我正在尝试编写一个简单的应用程序,该应用程序必须读取某个目录中当前打开的所有文件。 更具体地说,我想在我的Documents文件夹中的任何地方打开一个文件列表, 但我不只想要进程的ID或进程名称,我想要打开文件的完整路径。

事情是我还没有发现任何事情。 我既不能在linux shell(使用ps和lsof命令)也不能使用python的psutil库。这些都没有给我提供我需要的信息,这只是目录中当前打开文件的路径。

有什么建议吗?

P.S:我将此标记为python问题(除了os相关标签),因为如果可以使用某个python库完成它将是一个加分。

1 个答案:

答案 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值。