有没有办法强制Python中的任何函数都不要冗长?
在通过Pytork加载预训练模型时有没有办法强制Python中的任何函数都不要冗长?,python,pytorch,verbosity,Python,Pytorch,Verbosity,在通过Pytork加载预训练模型时 model.load_state_dict(torch.load(MODEL_PATH)) 控制台中充斥着包含模型信息的输出(这很烦人)。如果没有详细选项,无论是在model.load\u state\u dict中还是在torch.load中。如果我忽略了这个参数,请告诉我 然而,这让我想到了一个问题:是否有任何常规方法可以强制函数不冗长。可能是这样的: with os.nonverbose(): model.load_state_dict(torc
model.load_state_dict(torch.load(MODEL_PATH))
控制台中充斥着包含模型信息的输出(这很烦人)。如果没有详细选项,无论是在model.load\u state\u dict
中还是在torch.load
中。如果我忽略了这个参数,请告诉我
然而,这让我想到了一个问题:是否有任何常规方法可以强制函数不冗长。可能是这样的:
with os.nonverbose():
model.load_state_dict(torch.load(MODEL_PATH))
有什么想法吗?正如@triplee所评论的,大多数库都会使用Python日志记录,可以对其进行大量修改。我以前没有使用过Pytork,但从它看来,它实际上使用的是
print
(如果可以的话,这很可怕)
但是,通常可以通过重定向stdout来抑制任何内容的stdout输出。这里有一个很好的链接
在您的问题中,您会问是否可以使用上下文管理器来实现这一点。我不明白为什么不这样做,考虑到您希望在函数调用后重置stdout,这似乎是合适的。大概是这样的:
from io import StringIO # Python3
import sys
class SilencedStdOut:
def __enter__(self):
self.old_stdout = sys.stdout
self.result = StringIO()
sys.stdout = self.result
def __exit__(self, *args, **kwargs):
sys.stdout = self.old_stdout
result_string = self.result.getvalue() # use if you want or discard.
但是,如果您只想限制一个函数而不想限制一个代码块,那么装饰器也应该可以正常工作。它不是简单地使用标准的Python
日志记录模块吗?这是一个出色的解决方案,我从来没有想过在Python中覆盖stdout。从标准库中,还有,同样的效果。