当前位置:  开发笔记 > 编程语言 > 正文

Python中的跨平台/ dev/null

如何解决《Python中的跨平台/dev/null》经验,为你挑选了4个好方法。

我正在使用以下代码在Linux/OSX上为Python库隐藏stderr我默认不控制写入stderr:

f = open("/dev/null","w")
zookeeper.set_log_stream(f)

是否有一个简单的跨平台替代/ dev/null?理想情况下,它不会消耗内存,因为这是一个长时间运行的过程.



1> msanders..:

os.devnull怎么样?

import os
f = open(os.devnull,"w")
zookeeper.set_log_stream(f)



2> Alex Martell..:
class Devnull(object):
    def write(self, *_): pass

zookeeper.set_log_stream(Devnull())

os.devnull当然打开也很好,但是这样每个输出操作都会发生(作为noop)"正在进行中" - 没有上下文切换到操作系统并返回,也没有缓冲(虽然一些缓冲通常由a使用open)因此甚至更少的内存消耗.


我知道使用os.devnull可能会产生一些开销.但是如果一个人使用你的对象,如果zookeeper对象调用其他方法然后`write`它的log_stream文件对象呢?也许它会调用`writelines`方法?然后有一个例外.
当你需要一个*real*文件时,这不起作用,例如``fileno()`.

3> SilentGhost..:
>>> import os
>>> os.devnull
'nul'


只是为了澄清:Windows上给出了“ nul”。Linux将返回“ / dev / null”。

4> Andrew Aylet..:

创建自己的文件类对象,什么都不做?

class FakeSink(object):
    def write(self, *args):
        pass
    def writelines(self, *args):
        pass
    def close(self, *args):
        pass


有些操作还需要'fileno'
推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有