it-swarm.it

Come posso riprodurre un suono quando l'esecuzione dello script è pronta?

Di tanto in tanto eseguo alcuni script python che impiegano molto tempo per essere eseguiti.

Li eseguo in questo modo: $ time python MyScript.py

Come posso riprodurre un suono non appena viene eseguita l'esecuzione dello script?

Uso Ubuntu 10.10 (desktop Gnome).

47
Martin Thoma

Aggiungi qualsiasi comando che riproduce un suono; questo potrebbe essere semplice come

$ time mycommand; printf '\7'

o complesso come

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

(I comandi presuppongono che pulseaudio sia installato; sostituire il lettore audio, che dipenderà dall'ambiente desktop.)

42
geekosaur

spd-say

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

Ciclo infinito con -w se hai bisogno di ulteriore motivazione:

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

Preinstallato su 14.04 tramite pacchetto speech-dispatcher: http://releases.ubuntu.com/trusty/ubuntu-14.04.4-desktop-AMD64.manifest per i non vedenti suppongo?

Aggiungi anche un popup

Questa combo salva la vita (b sta per beep):

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

e poi:

super-slow-command;b

Se sono da qualche parte nella stanza, lo ascolterò e saprò che il lungo lavoro è finito.

Altrimenti, vedrò il popup quando torno al mio computer.

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

Basta scegliere un suono sul disco rigido e inserire un comando per riprodurlo subito dopo il comando che stai aspettando; accadranno in sequenza:

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

(Puoi usare qualsiasi giocatore, naturalmente). Ho uno script chiamato alertdone che riproduce un tono e mostra un avviso libnotify quando eseguito; Lo uso esattamente per questa occasione:

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

È davvero semplice, quindi se vuoi crearne uno tuo puoi basarlo su questo (il mio richiede notify-more, mplayer e ~/tones/alert_1.wav anche se):

#!/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 è un riproduttore di suoni molto semplice (no UI) dal pacchetto soxInstalla sox http://bit.ly/software-small . Puoi sostituirlo con qualsiasi altro riproduttore audio guidato dalla riga di comando.

Personalmente, utilizzo my-script && notify-send "done". Questo invia una notifica desktop, che su Linux Mint (Cinnamon) assomiglia a questo:

enter image description here

5
eeze

Puoi anche farlo accadere automaticamente.

Ti mostrerò come in zsh, quindi aggiungo informazioni su bash.

L'essenza si presenta così:

preexec()
{
    starttime=$SECONDS
}

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

Puoi anche farlo solo se il programma era Python, ad es.

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
}

In bash, il modo migliore è scaricare preexec.bash.txt e cercarlo (ad es. . ~/preexec.bash.txt nella parte superiore del tuo ~/.bashrc, quindi quanto sopra (o qualcosa di simile) dovrebbe funzionare. (Non sono sicuro del $3 bit per verificare se il comando è Python.)

Se stai usando il Terminale GNOME, ti consiglio anche di Terminale GNOME lampeggiante . È una patch che ho scritto che fa lampeggiare il terminale quando viene eseguito un comando, quindi puoi Alt-Tab su qualcos'altro, quindi ti fa sapere quando è finito.

3
Mikel

Non è necessario aggiungere un comando a tutto, puoi effettivamente utilizzare uno script, che lo fa automaticamente per te. Si chiama ndistract-me ed è disponibile su Github.

esempio

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

ora inizia una nuova bash e sei pronto. Suono e avviso possono essere modificati modificando lo script.

1
Jakub Lucký