Python中的跨平台/ dev/null

Tri*_*tan 78 python

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

f = open("/dev/null","w")
zookeeper.set_log_stream(f)
Run Code Online (Sandbox Code Playgroud)

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

msa*_*ers 130

os.devnull怎么

import os
f = open(os.devnull,"w")
zookeeper.set_log_stream(f)
Run Code Online (Sandbox Code Playgroud)


Ale*_*lli 43

class Devnull(object):
    def write(self, *_): pass

zookeeper.set_log_stream(Devnull())
Run Code Online (Sandbox Code Playgroud)

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

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

Sil*_*ost 5

>>> import os
>>> os.devnull
'nul'
Run Code Online (Sandbox Code Playgroud)

  • 只是为了澄清:Windows上给出了“ nul”。Linux将返回“ / dev / null”。 (11认同)

And*_*ett 5

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

class FakeSink(object):
    def write(self, *args):
        pass
    def writelines(self, *args):
        pass
    def close(self, *args):
        pass
Run Code Online (Sandbox Code Playgroud)

  • 有些操作还需要'fileno' (2认同)