gpt4 book ai didi

python - strace 一个 python 函数

转载 作者:太空狗 更新时间:2023-10-30 00:13:30 24 4
gpt4 key购买 nike

是否可以对打开的文件跟踪 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:

  1. 像这样创建装饰器:(未经测试)

-

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
  1. strace -e 文件 下运行整个应用程序。
  2. 仅获取调用 open(function-something-start)open(function-something-end) 之间的部分。

如果您执行 strace -f,您将免费获得 python/外部分离。看看pid调用什么函数就可以了。

关于python - strace 一个 python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36905470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com