【问题标题】:In Python, how can the console output of a selection of code be suppressed? [duplicate]在 Python 中,如何抑制选择代码的控制台输出? [复制]
【发布时间】:2016-08-23 01:33:26
【问题描述】:

我有一小部分代码:

stream = pyaudio.PyAudio().open(
    format   = pyaudio.PyAudio().get_format_from_width(1),
    channels = 1, 
    rate     = bitrate, 
    output   = True
)

当我运行它时,它会产生几行控制台输出:

ALSA lib pcm_dsnoop.c:614:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dmix.c:1024:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2267:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2267:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2267:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_dmix.c:1024:(snd_pcm_dmix_open) unable to open slave
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started

如何更改围绕此特定函数调用的代码,以使上述表单的控制台输出不出现,同时不使其他代码的控制台输出消失?

我正在设想以上下文管理器的形式解决这个问题,可能有点像下面这样:

@contextlib.contextmanager
def silence():
    # <insert magic to direct stdout and stderr to null>
    yield
    # <insert magic to direct stdout and stderr to console>

with silence():
    stream = pyaudio.PyAudio().open(
        format   = pyaudio.PyAudio().get_format_from_width(1),
        channels = 1, 
        rate     = bitrate, 
        output   = True
    )

【问题讨论】:

    标签: python stdout stderr pyaudio silent


    【解决方案1】:

    装饰器可以工作。也许是这样的:

    def silence(func):
        def silenced():
            // silence output
            func()
            // change output to normal
        return silenced
    
    
    @silence
    def openStream(args):
        stream = pyaudio.PyAudio().open(
            format   = pyaudio.PyAudio().get_format_from_width(1),
            channels = 1, 
            rate     = bitrate, 
            output   = True
        )
        return stream
    

    【讨论】:

    • 嘿,谢谢你的帖子。我更多的是询问如何编写实际的静音和取消静音的东西(在您的代码中表示为 cmets)。
    • 哦,原来在上面的链接里
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多