Pregunta

Me gustaría que un programa Python me avise cuando haya completado su tarea emitiendo un pitido.Actualmente uso import os y luego use un programa de discurso de línea de comando para decir "Proceso completo". Prefiero que sea una simple "campana".

Sé que hay una función que se puede utilizar en Cacao aplicaciones, NSBeep, pero no creo que tenga mucho que ver con esto.

yo también lo he intentado

print('\a')

pero eso no funcionó.

Estoy usando una Mac, si no lo sabes por mi Cacao comenta, para que pueda ayudar.

¿Fue útil?

Solución

Has probado :

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

Eso me funciona aquí en Mac OS 10.5

En realidad, creo que tu intento original también funciona con una pequeña modificación:

print('\a')

(Solo necesitas las comillas simples alrededor de la secuencia de caracteres).

Otros consejos

Si tiene PyObjC (el puente Python - Objective-C) instalado o está ejecutando el sistema Python de OS X 10.5 (que se envía con PyObjC), puede hacerlo

from AppKit import NSBeep
NSBeep()

para reproducir la alerta del sistema.

Probé el mezclador del módulo pygame y funciona bien.Primero instale el módulo:

$ sudo apt-get install python-pygame

Luego en el programa escribe esto:

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

Con pygame tienes muchas opciones de personalización, con las que también puedes experimentar.

Tuve que desactivar la opción "Silenciar campana de terminal" en mi perfil de terminal activo en iTerm durante print('\a') trabajar.Parecía funcionar bien de forma predeterminada en la Terminal.

También puedes usar el módulo Mac. Carbon.Snd para reproducir el pitido del sistema:

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

Los módulos Carbon no tienen ninguna documentación, así que tuve que usar help(Carbon.Snd) para ver qué funciones estaban disponibles.Parece ser una interfaz directa a Carbon, por lo que los documentos de Apple Developer Connection probablemente ayuden.

Aprovechando la respuesta de Barry Wark...NSBeep() de AppKit funciona bien, pero también hace que salte el ícono de terminal/aplicación en la barra de tareas.Algunas líneas adicionales con NSSound() evita eso y da la oportunidad de usar otro sonido:

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

Los archivos de sonido estándar se pueden encontrar a través de la línea de comandos locate /System/Library/Sounds/*.aiffEl archivo utilizado por NSBeep() parece ser '/System/Library/Sounds/Funk.aiff'

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top