是否可以对打开的文件跟踪 python 函数,并区分它们是由 python 还是子进程打开的?
read_python, read_external = [], []
@strace_read(read_python, read_external)
function test():
file = open("foo.txt", "r")
subprocess.call(["cat", "bar.txt"])
for file in read_python:
print("python: ", file)
for file in read_external:
print("external: ", file)
所以输出如下:
>>> python: foo.txt
>>> external: bar.txt
我最感兴趣的是使用装饰器。差异化不是当务之急。
从概念上讲,我最好的猜测是用包装器替换 load_function(open)
的实例......实际上,我不知道,有太多方法可以访问 open
.
最佳答案
我会用更简单的方法解决它,但结果相似。而不是弄清楚如何在单个函数上启用 strace:
- 像这样创建装饰器:(未经测试)
-
def strace_mark(f):
def wrapper(*args, **kwargs):
try:
open('function-%s-start' % f.__name__, 'r')
except:
pass
ret = f(*args, **kwargs)
try:
open('function-%s-end' % f.__name__, 'r')
except:
pass
return ret
- 在
strace -e 文件
下运行整个应用程序。 - 仅获取调用
open(function-something-start)
和open(function-something-end)
之间的部分。
如果您执行 strace -f
,您将免费获得 python/外部分离。看看pid调用什么函数就可以了。
关于python - strace 一个 python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36905470/