有没有办法强制任何函数在 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_dict
和 torch.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.
但是,如果您只想抑制单个函数而不是代码块,那么装饰器也应该可以正常工作。
通过
加载带有pytorch的预训练模型时model.load_state_dict(torch.load(MODEL_PATH))
控制台充满了包含模型信息的输出(这很烦人)。 Afaik 在 model.load_state_dict
和 torch.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.
但是,如果您只想抑制单个函数而不是代码块,那么装饰器也应该可以正常工作。