栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

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

import sysimport iosave_stdout = sys.stdoutsys.stdout = io.BytesIO()foo()sys.stdout = save_stdout

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

import contextlibimport ioimport sys@contextlib.contextmanagerdef nostdout():    save_stdout = sys.stdout    sys.stdout = io.BytesIO()    yield    sys.stdout = save_stdout

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

with nostdout():    foo()

更多优化:您只需要用具有

no-opwrite
方法的对象替换
sys.stdout
。例如:

import contextlibimport sysclass DummyFile(object):    def write(self, x): pass@contextlib.contextmanagerdef nostdout():    save_stdout = sys.stdout    sys.stdout = DummyFile()    yield    sys.stdout = save_stdout

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/641573.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号