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


45

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


Utilisez-vous bashou zsh? Il existe en fait quelques moyens de faire en sorte que cela se produise automatiquement, mais ils sont très impliqués et dépendent du shell que vous utilisez.
Mikel

$ echo $ SHELL retourne "/ bin / bash"
Martin Thoma

Réponses:


40

Ajoute 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, ce qui dépend de votre environnement de bureau.)


6
+1 paplayest probablement la meilleure commande à utiliser pour jouer un son sur un système Linux "moderne".
Mikel

4
printf '\ 7' ne fonctionne pas pour moi, mais cette commande a fonctionné comme je le voulaistime 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'fonctionne pour moi (paplay pas; (git shell)) mais c'est juste un très petit bip . Y a-t-il plus de codes qui font d'autres sons? J'ai essayé \6, \8mais ce sont des personnages.
laggingreflex

2
@laggingreflex Non, \7(BEL) est généralement le seul caractère qui déclenche éventuellement un son (voir l'article de Wikipédia, Caractère de contrôle ); notez que cela ne donne pas toujours un son non plus.
musiphil

3
@laggingreflex Vous n'avez probablement plus besoin de ça, mais juste pour rire;)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'

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

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

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

Ajoutez aussi une popup

Ce combo est un épargnant de vie ( breprésente 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 l'entendrai et je saurai que le travail est long.

Sinon, je vais voir le popup quand je reviens à mon ordinateur.

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


Pour obtenir l’ spd-sayoutil associé speech-dispatcher, vous devrez peut-être installer un sous-package tel que speech-dispatcher-utils(Fedora 24).
dfarrell07

9

Il vous suffit de choisir un son sur votre disque dur et de définir une commande pour le lire juste après la commande que vous attendez. ils vont se passer séquentiellement:

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

(Vous pouvez utiliser n'importe quel joueur, naturellement). J'ai un script appelé alertdonequi joue une tonalité et affiche une alerte libnotify lorsqu'il est exécuté; Je l'utilise pour cette occasion:

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

Il est très simple, donc si vous voulez faire votre propre , vous pouvez baser sur ce ( le mien exige notify-more, mplayeret ~/tones/alert_1.wavbien):

#!/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

2
notify-moreou notify-sendpourrait en effet être des alternatives utiles à la lecture d'un son.
Mikel

@ Mikel Je suis complètement accro à libnotify; tout sur mon système affiche des notifications
Michael Mrozek

8
time python MyScript.py; play /path/so/sound.ogg

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


Oui, play, aplayou paplay. (Mon système Ubuntu a aplayet paplaypar défaut.)
Mikel

1
time python MyScript.py -n 40; paplay /usr/share/sounds/ubuntu/stereo/desktop-login.oggtravaillé, merci.
Martin Thoma

5

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

entrez la description de l'image ici


3

Vous pouvez également y arriver automatiquement.

Je vais vous montrer comment 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 que si le programme était Python, par exemple

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 général bash, le meilleur moyen est de télécharger preexec.bash.txt et de le source (par exemple, . ~/preexec.bash.txten haut de votre ~/.bashrc, alors ce qui précède (ou quelque chose de proche) devrait fonctionner. (Pas sûr du $3bit pour vérifier si la commande est Python .)

Si vous utilisez un terminal GNOME, je vous indiquerais également un terminal GNOME clignotant . C'est un correctif que j'ai écrit qui fait clignoter le terminal lorsqu'une commande est exécutée. Vous pouvez donc Alt-Tab passer à autre chose, puis vous permettre de savoir quand.


1

Vous n'avez pas besoin d'ajouter une commande à tout, vous pouvez réellement utiliser un script, cela le fait automatiquement pour vous. Cela s'appelle undistract-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

maintenant commencez nouvelle bash et vous êtes prêt. Son et alerte peuvent être modifiés en modifiant le script.


-1

Tout joueur peut être utilisé. J'ajoute cvlcpour être complet.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.