python注册回调函数,当有print输出时执行
时间: 2023-07-09 18:38:19 浏览: 165
可以使用 `sys.stdout` 对象来捕获 `print` 的输出,并在输出时执行回调函数。具体实现可以参考以下示例代码:
```python
import sys
def callback():
print("Callback executed!")
class PrintInterceptor:
def __init__(self, callback):
self.callback = callback
def write(self, text):
sys.__stdout__.write(text)
self.callback()
sys.stdout = PrintInterceptor(callback)
print("Hello, world!")
```
在这个示例中,我们定义了一个 `callback` 函数,当 `print` 输出时就会执行这个函数。接着,我们定义了一个名为 `PrintInterceptor` 的类,它继承了 `sys.stdout`,并在 `write` 方法中拦截了 `print` 的输出。在 `write` 方法中,我们首先调用了 `sys.__stdout__.write`,将输出传递给原始的 `sys.stdout` 对象,然后再执行回调函数。最后,我们将 `sys.stdout` 替换为 `PrintInterceptor` 对象,这样就可以在 `print` 输出时执行回调函数了。
需要注意的是,这种方式只能拦截使用 `print` 输出的内容,如果使用了其他方式输出,比如使用 `logging` 模块,那么就需要对相应的模块进行拦截,并在输出时执行回调函数。
阅读全文