有没有办法强制任何函数在 Python 中不冗长?

Is there a way to force any function to not be verbose in Python?

通过

加载带有pytorch的预训练模型时
model.load_state_dict(torch.load(MODEL_PATH))

控制台充满了包含模型信息的输出(这很烦人)。 Afaik 在 model.load_state_dicttorch.load 中都没有冗长选项。如果我忽略了这个参数,请告诉我。

然而,这让我想到了一个问题,是否有任何通用的方法可以强制函数不冗长。可能是这样的:

with os.nonverbose():
   model.load_state_dict(torch.load(MODEL_PATH))

有什么想法吗?

正如@triplee 评论的那样,大多数库会使用 Python 日志记录,可以对其进行大量修改。我之前没有使用过 PyTorch,但是从 https://github.com/pytorch/vision/issues/330 看来它实际上是在使用 print(如果它还可以,那就太可怕了)。

但是,一般来说,您可以通过重定向标准输出来抑制任何内容的标准输出输出。这里有一个不错的linkhttps://wrongsideofmemphis.com/2010/03/01/store-standard-output-on-a-variable-in-python/

在您的问题中,您询问是否可以使用上下文管理器完成此操作。我不明白为什么不,考虑到您想在函数调用后重置标准输出,这似乎是合适的。像这样:

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.

但是,如果您只想抑制单个函数而不是代码块,那么装饰器也应该可以正常工作。