2016-04-28 2 views
0

J'ai une petite sélection de code:En Python, comment la sortie de la console d'une sélection de code peut-elle être supprimée?

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

Quand je lance, il produit quelques lignes de sortie de la console:

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 

Comment puis-je changer mon code entourant cet appel de fonction particulière faire la sortie de la console du formulaire ci-dessus ne pas apparaître tout en ne faisant pas disparaître la sortie de la console de l'autre code?

J'imagine une solution à ce sous la forme d'un gestionnaire de contexte, peut-être quelque chose d'un peu comme ce qui suit:

@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 
    ) 

Répondre

0

décorateurs peuvent travailler. Peut-être quelque chose comme ça:

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 
+0

Hey, merci pour le poste. Je demandais plus sur la façon de coder les choses de silence et de désinsertion (dans votre code représenté par des commentaires). – d3pd

+0

Oh, c'est en fait dans le lien ci-dessus – alpert