¿Cómo puedo reproducir un sonido cuando la ejecución del script está lista?

44

Estoy ejecutando de vez en cuando algunos scripts de Python que tardan bastante en ejecutarse.

Los ejecuto así: $ time python MyScript.py

¿Cómo puedo reproducir un sonido tan pronto como finalice la ejecución del script?

Yo uso Ubuntu 10.10 (escritorio Gnome).

Martin Thoma
fuente
¿Estás usando basho zsh? En realidad, hay algunas formas de hacer que esto suceda automáticamente, pero están bastante involucrados y dependen del shell que esté utilizando.
Mikel
$ echo $ SHELL devuelve "/ bin / bash"
Martin Thoma

Respuestas:

39

Agregue cualquier comando que reproduzca un sonido; esto podría ser tan simple como

$ time mycommand; printf '\7'

o tan complejo como

$ time mycommand && paplay itworked.ogg || paplay bombed.ogg

(Los comandos asumen que pulseaudio está instalado; sustituya su reproductor de sonido, que dependerá de su entorno de escritorio).

geekosaur
fuente
66
+1 paplayes probablemente el mejor comando para reproducir un sonido en un sistema Linux "moderno".
Mikel
44
printf '\ 7' no funciona para mí, pero este comando funcionó como lo queríatime python MyScript.py -n 40 && paplay /usr/share/sounds/ubuntu/stereo/desktop-login.ogg || paplay /usr/share/sounds/ubuntu/stereo/phone-outgoing-busy.ogg
Martin Thoma
printf '\7'funciona para mí (paplay no; (git shell)) pero es solo un pequeño bip . ¿Hay más códigos que hacen otros sonidos? Lo intenté \6, \8pero son algunos personajes.
laggingreflex
2
@laggingreflex No, \7(BEL) suele ser el único carácter que posiblemente activa un sonido (consulte el artículo de Wikipedia Carácter de control ); tenga en cuenta que tampoco siempre puede emitir un sonido.
musiphil
3
@laggingreflex Probablemente ya no necesites esto, solo para reír;)for i in {1..30}; do for j in {1..3}; do printf '\7'; sleep 0.12; done; sleep 0.4; done
cprn
16

spd-say

sleep 2; spd-say 'get back to work'

Bucle infinito con -wsi necesita motivación adicional:

sleep 2; while true; do spd-say -w 'get back to work'; done

Preinstalado en 14.04 a través del paquete speech-dispatcher: http://releases.ubuntu.com/trusty/ubuntu-14.04.4-desktop-amd64.manifest para personas ciegas, supongo.

También agregue una ventana emergente

Este combo es un salvavidas ( bsignifica beep):

b() ( spd-say 'done'; zenity --info --text "$(date);$(pwd)" & )

y entonces:

super-slow-command;b

Si estoy en algún lugar de la habitación, lo escucharé y sabré que el largo trabajo está hecho.

De lo contrario, veré la ventana emergente cuando regrese a mi computadora.

Relacionado: https://stackoverflow.com/questions/7035/how-to-show-a-gui-message-box-from-a-bash-script-in-linux

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
Para obtener la spd-sayherramienta asociada speech-dispatcher, es posible que deba instalar un subpaquete como speech-dispatcher-utils(Fedora 24).
dfarrell07
9

Simplemente elija un sonido en su disco duro y ponga un comando para reproducirlo justo después del comando que está esperando; sucederán secuencialmente:

$ time python MyScript.py; mplayer ~/ScriptDone.wav

(Puedes usar cualquier jugador, naturalmente). Tengo un script llamado alertdoneque reproduce un tono y muestra una alerta de libnotify cuando se ejecuta; Lo uso exactamente para esta ocasión:

$ time python MyScript.py; alertdone "Done timing"

Es muy simple, por lo que si desea hacer su propia puede basar en esto (la mina requiere notify-more, mplayery ~/tones/alert_1.wavsin embargo):

#!/bin/bash
message=${1:-"Finished working"}
notify-more -t 10000 -i /usr/share/icons/gnome/32x32/actions/insert-object.png "Process Finished" "$message"
mplayer ~/tones/alert_1.wav
Michael Mrozek
fuente
2
notify-moreo de notify-sendhecho podrían ser alternativas útiles para reproducir un sonido.
Mikel
@Mikel Soy completamente adicto a libnotificar; todo en mi sistema muestra notificaciones emergentes
Michael Mrozek
8
time python MyScript.py; play /path/so/sound.ogg

playes un reproductor de sonido muy básico (sin interfaz de usuario) del paquete sox Install sox http://bit.ly/software-small . Puede reemplazarlo por cualquier otro reproductor de sonido con línea de comandos.

Gilles 'SO- deja de ser malvado'
fuente
Sí, play, aplay, o paplay. (Mi sistema Ubuntu tiene aplayy paplaypor defecto.)
Mikel
1
time python MyScript.py -n 40; paplay /usr/share/sounds/ubuntu/stereo/desktop-login.oggtrabajado, gracias.
Martin Thoma
5

Personalmente, yo uso my-script && notify-send "done". Esto envía una notificación de escritorio, que en Linux Mint (Cinnamon) se ve así:

ingrese la descripción de la imagen aquí

eeze
fuente
3

También puede hacer que esto suceda automáticamente.

Te mostraré cómo zsh, luego agregaré información sobre bash.

La esencia se ve así:

preexec()
{
    starttime=$SECONDS
}

precmd()
{
    if ((SECONDS - starttime >= 5)); then
        aplay "sound.wav"
        # or printf "\b", or notify-send, or whatever
    fi
}

También puede hacerlo solo si el programa era Python, p. Ej.

preexec()
{
    starttime=$SECONDS
    case $3 in python*)
        command_is_python=true;;
    *)
        command_is_python=false;;
    esac
}

precmd()
{
    if $command_is_python && ((SECONDS - starttime >= 5)); then
        aplay "sound.wav"
        # or printf "\b", or notify-send, or whatever
    fi
}

En bash, la mejor manera es descargar preexec.bash.txt y obtenerlo (por ejemplo, . ~/preexec.bash.txten la parte superior de su ~/.bashrc, entonces lo anterior (o algo parecido) debería funcionar. (No estoy seguro sobre el $3bit para verificar si el comando es Python .)

Si está utilizando el Terminal GNOME, también le señalaría el Terminal GNOME Intermitente . Es un parche que escribí que hace que el terminal parpadee cuando se ejecuta un comando, por lo que puede Alt-Tab a otra cosa, luego le avisa cuando está hecho.

Mikel
fuente
1

No necesita agregar un comando a todo, en realidad puede usar un script, que lo hace automáticamente por usted. Se llama undistract-me y está disponible en Github.

ejemplo

sudo apt install undistract-me    #installs the script (on Debian)
echo 'source /etc/profile.d/undistract-me.sh' >> ~/.bashrc #adds auto-enable to your console
echo 'export LONG_RUNNING_COMMAND_TIMEOUT=XXX' >> ~/.bashrc #where XXX is number of seconds when the command is long enough to alert you
echo 'export UDM_PLAY_SOUND=1' >> ~/.bashrc #to enable sound alert

ahora comienza un nuevo bash y estás listo. El sonido y la alerta se pueden cambiar modificando el guión.

Jakub Lucký
fuente
-1

Cualquier jugador puede ser usado. Estoy agregando cvlcpara completar.

nponeccop
fuente