gpt4 book ai didi

python - 停止 Python 模块打印

转载 作者:行者123 更新时间:2023-11-30 22:40:04 25 4
gpt4 key购买 nike

我正在使用一个名为 eventregistry 的模块,它是一个使用外部 API 的工具包。

当与服务器建立连接时,我在其模块上调用此方法(导入为 e_r)。

er = e_r.EventRegistry(apiKey="1234")

模块方法然后在内部打印:

using user provided API key for making requests
Event Registry host: http://eventregistry.org

这只会堵塞我的控制台,我只想在我的数据源之一抛出错误时打印它。我正在对此数据源发出多个请求,它在控制台中确实变得非常困惑!

有人知道某种“stopPrint()”函数,它允许我调用方法和运行函数,但阻止它们打印到控制台吗?

例如

er = stopPrint(e_r.EventRegistry(apiKey="1234"))

最佳答案

无需编辑模块,您可以暂时重新路由标准输出。

import sys
import os

def stopPrint(func, *args, **kwargs):
with open(os.devnull,"w") as devNull:
original = sys.stdout
sys.stdout = devNull
func(*args, **kwargs)
sys.stdout = original

stopPrint(e_r.EventRegistry,apiKey="1234")

更好的是,您可以通过使用类似于装饰器模式的方法将方法替换为包装版本,从而注册抑制函数。

def suppressOutput(func):
def wrapper(*args, **kwargs):
with open(os.devnull,"w") as devNull:
original = sys.stdout
sys.stdout = devNull
func(*args, **kwargs)
sys.stdout = original
return wrapper

e_r.EventRegistry = suppressOutput(e_r.EventRegistry)

# As many times as I want, stdout should always be suppressed.
e_r.EventRegistry(apiKey="1234")
e_r.EventRegistry(apiKey="1234")
e_r.EventRegistry(apiKey="1234")
e_r.EventRegistry(apiKey="1234")

对于解决方案的三重奏,这里是基于上下文管理器的方法!!

from contextlib import contextmanager
import sys
import os

@contextmanager
def suppressStream(stream):
with open(os.devnull, "w") as devNull:
orig = stream
stream = devNull
try:
yield
finally:
stream = orig

with suppressStream(sys.stdout):
e_r.EventRegistry(apiKey="1234")

with suppressStream(sys.stderr):
e_r.EventRegistry(apiKey="1234")

关于python - 停止 Python 模块打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42952623/

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