Domanda

Mi piacerebbe che un programma Python mi avvisasse quando ha completato il suo compito emettendo un segnale acustico.Attualmente utilizzo import os e quindi usa un programma di discorso sulla riga di comando per dire "processo completo". Preferisco di gran lunga essere una semplice "campana".

So che esiste una funzione che può essere utilizzata in Cacao app, NSBeep, ma non credo che abbia molto a che fare con questo.

Ci ho anche provato

print('\a')

ma non ha funzionato.

Sto usando un Mac, se non puoi dirlo dal mio Cacao commento, quindi può essere d'aiuto.

È stato utile?

Soluzione

Hai provato:

import sys
sys.stdout.write('\a')
sys.stdout.flush()

Questo funziona per me qui su Mac OS 10.5

In realtà, penso che il tuo tentativo originale funzioni anche con una piccola modifica:

print('\a')

(hai solo bisogno delle virgolette singole attorno alla sequenza di caratteri).

Altri suggerimenti

Se hai PyObjC (il bridge Python - Objective-C) installato o stai eseguendo il sistema Python di OS X 10.5 (fornito con PyObjC), puoi farlo

from AppKit import NSBeep
NSBeep()

per riprodurre l'avviso di sistema.

Ho provato il mixer dal modulo pygame e funziona benissimo. Innanzitutto installa il modulo:

$ sudo apt-get install python-pygame

Quindi nel programma, scrivi questo:

from pygame import mixer
mixer.init() #you must initialize the mixer
alert=mixer.Sound('bell.wav')
alert.play()

Con pygame hai molte opzioni di personalizzazione, che puoi anche sperimentare.

Ho dovuto disattivare la "campana del terminale di silenzio" opzione nel mio profilo terminale attivo in iTerm affinché print ('\ a') funzioni. Sembrava funzionare bene per impostazione predefinita in Terminal.

È inoltre possibile utilizzare il modulo Mac Carbon.Snd per riprodurre il segnale acustico di sistema:

>>> import Carbon.Snd
>>> Carbon.Snd.SysBeep(1)
>>> 

I moduli Carbon non hanno alcuna documentazione, quindi ho dovuto usare help (Carbon.Snd) per vedere quali funzioni erano disponibili. Sembra essere un'interfaccia diretta su Carbon, quindi i documenti su Apple Developer Connection probabilmente aiutano.

Basandosi sulla risposta di Barry Wark ... NSBeep () di AppKit funziona bene, ma fa anche saltare l'icona del terminale / app nella barra delle applicazioni. Alcune righe extra con NSSound () evitano ciò e offrono l'opportunità di usare un altro suono:

from AppKit import NSSound
#prepare sound:
sound = NSSound.alloc()
sound.initWithContentsOfFile_byReference_('/System/Library/Sounds/Ping.aiff', True)
#rewind and play whenever you need it:
sound.stop() #rewind
sound.play()

I file audio standard sono disponibili tramite la riga di comando individuare /System/Library/Sounds/*.aiff Il file utilizzato da NSBeep () sembra essere '/System/Library/Sounds/Funk.aiff'

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top