import re
import os
def get_filenames(pid):
dir = '/proc/' + str(pid) + '/fd'
if not os.access(dir, os.R_OK|os.X_OK): return
filenames = []
for fds in os.listdir(dir):
for fd in fds:
full_name = os.path.join(dir, fd)
try:
filename = os.readlink(full_name)
if filename == '/dev/null' or \
re.match(r'pipe:\[\d+\]',file) or \
re.match(r'socket:\[\d+\]',file):
filename = None
except OSError as err:
if err.errno == 2:
filename = None
else:
raise(err)
if filename:
filenames.append(filename)
return filenames
是的,前提是你能得到C程序的进程ID。您可以使用从
subprocess.Popen
返回的对象的pid
属性来执行此操作。在获得pid之后,您可以打开
/proc
文件系统中的进程条目,并查看fd
子目录。它包含指向进程已打开的所有文件的符号链接。可以通过这些链接获得真正的文件名。在例如,这将返回文件名列表:
或者,下载
psutil
https://pypi.python.org/pypi/psutil,并使用get_open_files()
方法。在请注意,无论使用哪种机制,都有可能出现争用条件,因为通常您不知道C程序何时打开或关闭文件。在
相关问题 更多 >
编程相关推荐