web-dev-qa-db-fra.com

Comment puis-je jouer un son lorsque l'exécution du script est prête?

J'exécute de temps en temps des scripts python dont l'exécution est assez longue.

Je les exécute comme ceci: $ time python MyScript.py

Comment puis-je jouer un son dès que l'exécution du script est terminée?

J'utilise Ubuntu 10.10 (bureau Gnome).

47
Martin Thoma

Ajoutez n'importe quelle commande qui joue un son; cela pourrait être aussi simple que

$ time mycommand; printf '\7'

ou aussi complexe que

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

(Les commandes supposent que pulseaudio est installé; remplacez votre lecteur audio, qui dépendra de votre environnement de bureau.)

42
geekosaur

spd-say

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

Boucle infinie avec -w si vous avez besoin de motivation supplémentaire:

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

Pré-installé le 14.04 via le package speech-dispatcher: http://releases.ubuntu.com/trusty/ubuntu-14.04.4-desktop-AMD64.manifest pour les aveugles je suppose?

Ajoutez également une fenêtre contextuelle

Ce combo est un épargnant de vie (b signifie beep):

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

et alors:

super-slow-command;b

Si je suis quelque part dans la pièce, je vais l'entendre et je sais que le long travail est terminé.

Sinon, je verrai la fenêtre lorsque je reviendrai sur mon ordinateur.

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

Choisissez simplement un son sur votre disque dur et exécutez une commande pour le jouer juste après la commande que vous attendez; ils se produiront séquentiellement:

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

(Vous pouvez naturellement utiliser n'importe quel lecteur). J'ai un script appelé alertdone qui joue un ton et affiche une alerte libnotify lors de son exécution; Je l'utilise pour exactement cette occasion:

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

C'est vraiment simple, donc si vous voulez créer le vôtre, vous pouvez le baser dessus (le mien nécessite notify-more, mplayer et ~/tones/alert_1.wav bien que):

#!/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
9
Michael Mrozek
time python MyScript.py; play /path/so/sound.ogg

play est un lecteur de son très basique (sans interface utilisateur) du paquet soxInstallez sox http://bit.ly/software-small . Vous pouvez le remplacer par n'importe quel autre lecteur audio piloté par ligne de commande.

Personnellement, j'utilise my-script && notify-send "done". Cela envoie une notification de bureau, qui sous Linux Mint (Cinnamon) ressemble à ceci:

enter image description here

5
eeze

Vous pouvez également faire en sorte que cela se produise automatiquement.

Je vais vous montrer comment dans zsh, puis ajouter des informations sur bash.

L'essence ressemble à ceci:

preexec()
{
    starttime=$SECONDS
}

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

Vous pouvez également le faire uniquement si le programme était en Python, par ex.

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
}

Dans bash, la meilleure façon est de télécharger preexec.bash.txt et de le source (par exemple . ~/preexec.bash.txt en haut de votre ~/.bashrc, alors ce qui précède (ou quelque chose de proche) devrait fonctionner. (Je ne suis pas sûr de la $3 bit pour vérifier si la commande est Python.)

Si vous utilisez GNOME Terminal, je voudrais également vous indiquer Flashing GNOME Terminal . C'est un patch que j'ai écrit qui fait clignoter le terminal lorsqu'une commande est exécutée, vous pouvez donc Alt-Tab à autre chose, puis il vous permet de savoir quand c'est fait.

3
Mikel

Vous n'avez pas besoin d'ajouter une commande à tout, vous pouvez réellement utiliser un script, qui le fait automatiquement pour vous. Il s'appelle ndistract-me et il est disponible sur Github.

exemple

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

commencez maintenant un nouveau bash et vous êtes prêt. Le son et l'alerte peuvent être modifiés en modifiant le script.

1
Jakub Lucký