Вопрос

Я бы хотел, чтобы программа на 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'

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top