您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使Python中的函数标准输出静音,而不会破坏sys.stdout并恢复每个函数调用

使Python中的函数标准输出静音,而不会破坏sys.stdout并恢复每个函数调用

stdout假设foo包含print语句,在执行操作时分配变量不会产生任何影响-另一个示例,说明为什么您永远不应该从模块 内部 导入内容(如此处所做的操作),而始终从模块 内部整体 导入(然后使用限定名称)。copy顺便说一句,这无关紧要。您的摘要的正确等效项是:

import sys
save_stdout = sys.stdout
sys.stdout = open('trash', 'w')
foo()
sys.stdout = save_stdout

,当代码正确时,是使它更优雅或更快速的时候了。例如,您可以使用内存中类似文件的对象代替文件“ trash”:

import sys
import io
save_stdout = sys.stdout
sys.stdout = io.BytesIO()
foo()
sys.stdout = save_stdout

为了优雅起见, 上下文 是最佳的,例如:

import contextlib
import io
import sys

@contextlib.contextmanager
def nostdout():
    save_stdout = sys.stdout
    sys.stdout = io.BytesIO()
    yield
    sys.stdout = save_stdout

一旦定义了此上下文,对于不需要标准输出的任何块,

with nostdout():
    foo()

更多优化:您只需要用具有no-opwrite方法的对象替换sys.stdout 。例如:

import contextlib
import sys

class DummyFile(object):
    def write(self, x): pass

@contextlib.contextmanager
def nostdout():
    save_stdout = sys.stdout
    sys.stdout = DummyFile()
    yield
    sys.stdout = save_stdout

与之前的实现方式相同nostdout。我认为它不会比这更干净或更快速;-)。

python 2022/1/1 18:38:02 有241人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶