为什么Python的audithook不是在Python3.12中调用的,而是在Jupiter Nootbooks中调用的

问题描述 投票:0回答:1

据我了解,创建测试对象时应调用以下函数

audit
。事实并非如此,但这是为什么。

import sys

def audit(event, args):
    output = f'{event} with args={args}'
    print(output)

sys.addaudithook(audit)

class Test: 
    def __init__(self):
        pass

a = Test() # -> shoud not be possible

如果您将代码复制到 Jupyter Nootbook 中,您将得到以下结果:

compile with args=<ast. Module object at 0x7f466a6aeb90>,None)
exec with args=<code object ‹module> at 0x7f466a63bd70, file "/tmp/ipykernel_27420/3704920664-py", line 1>,)
compile with args=<ast.Module object at 0x7f466a6aec10>, None) 
exec with args=<code object ‹module> at 0x7f466a63bado, file "/ tmp/ipykernel_27420/3704920664-py", line 1>, )
sys._getframe with args=(<frame at 0x7f466a678d40, file '/home/user/.conda/envs/iiv/lib/python3.12/logging/init_.py', line 1616, code findCa
object._getattr_ with args=‹frame at 0x7f466aa812a0, file '/home/user/.conda/envs/iiv/lib/python3.12/logging/.init_.py', line 1672, code
object _getattr_with args=<frame at 0x7f466a66410, file '/home/user/.conda/envs/iiv/lib/python3.12/logging/init_.py', line 1527, code d
object._getattr_with args=<frame at 0x7f466a80d60,file '/home/user/.conda/envs/iiv/lib/python3.12/site-packages/ipykernel/kernelbase.py'
object._ getattr_ with args=<frame at 0x7f466a80d60, file '/home/user/.conda/envs/iiv/lib/python3.12/site-packages/ipykernel/kernelbase.py',
python python-3.x
1个回答
0
投票

是的,我已经确认了您的评论。我还将您的代码复制到 .py 文件中,当我在终端中执行它时,我根本没有任何输出。

但是,当我将相同的代码复制到 .ipynb 文件(Jupyter Notebook)中时,我从审计中收到了大量有关使用相应参数执行哪些事件的信息。

有谁有 python 审计的经验,通过终端执行的“正常”.py 文件和 .ipynb 文件之间有区别吗?

© www.soinside.com 2019 - 2024. All rights reserved.