Звук питона (“Колокольчик”)
Вопрос
Я бы хотел, чтобы программа на Python предупреждала меня, когда она выполнит свою задачу, издавая звуковой сигнал.В настоящее время я использую import os
а затем используйте речевую программу командной строки, чтобы сказать "Процесс завершен". Я бы предпочел, чтобы это был простой "звонок".
Я знаю, что есть функция, которую можно использовать в Какао Приложения, NSBeep
, но я не думаю, что это имеет к этому какое-то отношение.
Я тоже пытался
print('\a')
но это не сработало.
Я использую Mac, если вы не поняли по моему Какао прокомментируйте, так что это может помочь.
Решение
Вы пробовали :
import sys
sys.stdout.write('\a')
sys.stdout.flush()
Это работает для меня здесь, на Mac OS 10.5
На самом деле, я думаю, что ваша первоначальная попытка также работает с небольшими изменениями:
print('\a')
(Вам просто нужны одинарные кавычки вокруг последовательности символов).
Другие советы
Если у вас установлен PyObjC (мост Python - Objective-C) или вы работаете на системном python OS X 10.5 (который поставляется с PyObjC), вы можете сделать
from AppKit import NSBeep
NSBeep()
чтобы воспроизвести системное оповещение.
Я попробовал микшер из модуля pygame, и он работает нормально.Сначала установите модуль:
$ sudo apt-get install python-pygame
Затем в программе напишите это:
from pygame import mixer
mixer.init() #you must initialize the mixer
alert=mixer.Sound('bell.wav')
alert.play()
С pygame у вас есть множество вариантов настройки, с которыми вы можете дополнительно поэкспериментировать.
Мне пришлось отключить опцию "Беззвучный звонок терминала" в моем активном профиле терминала в iTerm для print('\a')
на работу.Казалось, по умолчанию в терминале все работает нормально.
Вы также можете использовать модуль Mac Carbon.Snd
для воспроизведения системного звукового сигнала:
>>> import Carbon.Snd
>>> Carbon.Snd.SysBeep(1)
>>>
У углеродных модулей нет никакой документации, поэтому мне пришлось использовать help(Carbon.Snd)
чтобы посмотреть, какие функции были доступны.Похоже, это прямой интерфейс к Carbon, так что документы Apple Developer Connection, вероятно, помогут.
Основываясь на ответе Барри Уорка...NSBeep()
из AppKit работает нормально, но также заставляет значок терминала / приложения на панели задач прыгать.Несколько дополнительных строк с NSSound()
позволяет избежать этого и дает возможность использовать другой звук:
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()
Стандартные звуковые файлы можно найти через командную строку locate /System/Library/Sounds/*.aiff
Файл, используемый NSBeep()
кажется, что это '/System/Library/Sounds/Funk.aiff'