2008-08-17 16 views
43

Ich möchte ein Python-Programm haben, das mich benachrichtigt, wenn es seine Aufgabe mit einem Piepton beendet hat. Zurzeit verwende ich import os und verwende dann ein Befehlszeilen-Sprachprogramm, um "Vorgang abgeschlossen" zu sagen. Ich bin es eher eine einfache "Glocke".Python Sound ("Bell")

Ich weiß, dass es eine Funktion gibt, die in Cocoa-Apps verwendet werden kann, NSBeep, aber ich glaube nicht, dass das viel damit zu tun hat.

Ich habe auch versucht print(\a), aber das hat nicht funktioniert.

Ich benutze einen Mac, wenn Sie nicht durch meinen Cocoa-Kommentar feststellen können, damit das helfen kann.

Danke!

+6

'import os zu sein ; os.system ('sagen "Bierzeit."'); print ('\ a \ a \ a') ' –

Antwort

61

Haben Sie versucht:

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

Das ist für mich hier auf Mac OS 10.5

Eigentlich, denke ich Ihre ursprüngliche Versuch funktioniert auch mit einer kleinen Modifikation funktioniert:

print('\a') 

(Sie brauchen nur die einfachen Anführungszeichen um die Zeichenfolge).

+4

Ich bin auf Ubuntu, es funktioniert nicht für mich. Irgendeine Idee? – kecske

+11

@kecske es ist üblich [um die hörbare Glocke zu deaktivieren] (http://www.cyberciti.biz/faq/how-to-linux-disable-or-urn-off-beep-sound-for-terminal/) in terminal configs, was bedeuten würde, dass dies "funktioniert", aber keinen Lärm macht (äh, nur bemerkt, dass dein Kommentar vor ungefähr 9 Monaten gepostet wurde) – dbr

+0

Funktioniert auch unter Windows XP (in einer Konsolen-App). – martineau

5

Ich musste die Option "Silence terminal bell" in meinem aktiven Terminal-Profil in iTerm für print('\a') deaktivieren, um zu funktionieren. Es schien im Terminal standardmäßig zu funktionieren.

Sie können auch den Mac verwenden Modul Carbon.Snd das System Signalton zu spielen:

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

Die Carbon-Module haben keine Dokumentation, also musste ich help(Carbon.Snd) verwenden, um zu sehen, welche Funktionen zur Verfügung standen. Es scheint eine direkte Schnittstelle zu Carbon zu sein, so dass die Dokumente auf Apple Developer Connection wahrscheinlich helfen.

10

Wenn Sie PyObjC (der Python - Objective-C-Brücke) installiert oder ausgeführt wird auf OS X 10.5 System Python (die Schiffe mit PyObjC) können Sie

from AppKit import NSBeep 
NSBeep() 

tun, das System zu spielen aufmerksam.

6

Ich habe den Mixer aus dem Pygame-Modul versucht, und es funktioniert gut. Zuerst installieren Sie das Modul:

$ sudo apt-get install python-pygame 

Dann in dem Programm, das schreibe:

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

Mit pygame haben Sie viele Anpassungsmöglichkeiten, die Sie mit zusätzlich experimentieren können.

1

Aufbauend auf Barry Warks Antwort ... NSBeep() von AppKit funktioniert gut, aber macht auch das Terminal/App-Symbol in der Taskleiste springen. Ein paar zusätzliche Linien mit NSSound() vermeidet das und bietet die Möglichkeit, einen anderen Ton zu verwenden:

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

Standard-Sounddateien können über Command locate /System/Library/Sounds/*.aiff Die Datei von NSBeep() scheint verwendet finden '/System/Library/Sounds/Funk.aiff'