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


45

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


Stai usando basho zsh? In realtà ci sono alcuni modi per farlo accadere automaticamente, ma sono abbastanza coinvolti e dipendono dalla shell che stai usando.
Mikel

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

Risposte:


40

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


6
+1 paplayè probabilmente il miglior comando da usare per riprodurre un suono su un "moderno" sistema Linux.
Mikel

4
printf '\ 7' non funziona per me, ma questo comando ha funzionato come volevotime 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'funziona per me (paplay no; (git shell)) ma è solo un piccolo bip . Ci sono più codici che producono altri suoni? Ci ho provato \6, \8ma sono alcuni personaggi.
laggingreflex,

2
@laggingreflex No, \7(BEL) di solito è l'unico personaggio che può attivare un suono (vedi l'articolo di controllo carattere di Wikipedia ); nota che potrebbe non emettere sempre neanche un suono.
musiphil,

3
@laggingreflex Probabilmente non avrai più bisogno di questo, ma solo per ridere;)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'

Ciclo infinito con -wse 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 ( bsta 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


Per spd-sayassociare lo strumento speech-dispatcher, potrebbe essere necessario installare un pacchetto secondario come speech-dispatcher-utils(Fedora 24).
dfarrell07,

9

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 alertdoneche suona un tono e mostra un avviso libnotify quando eseguito; Lo uso esattamente per questa occasione:

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

E 'molto semplice, quindi se volete fare il vostro proprio si può basare su questo (il mio richiede notify-more, mplayere ~/tones/alert_1.wavperò):

#!/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-moreo notify-sendpotrebbe davvero essere un'alternativa utile alla riproduzione di un suono.
Mikel

@Mikel Sono completamente dipendente da libnotify; tutto sul mio sistema fa apparire notifiche
Michael Mrozek

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

playè un riproduttore audio molto semplice (no UI) dal pacchetto sox Installa sox http://bit.ly/software-small . Puoi sostituirlo con qualsiasi altro riproduttore audio guidato dalla riga di comando.


Yep, play, aplay, o paplay. (Il mio sistema Ubuntu ha aplaye paplaydi default.)
Mikel

1
time python MyScript.py -n 40; paplay /usr/share/sounds/ubuntu/stereo/desktop-login.oggha funzionato, grazie.
Martin Thoma,

5

Personalmente, io uso my-script && notify-send "done". Questo invia una notifica desktop, che su Linux Mint (Cinnamon) è simile al seguente:

inserisci qui la descrizione dell'immagine


3

Puoi anche farlo accadere automaticamente.

Ti mostrerò come zsh, quindi aggiungere 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 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 sorgente (es. Nella . ~/preexec.bash.txtparte superiore del tuo ~/.bashrc, quindi il sopra (o qualcosa vicino ad esso) dovrebbe funzionare. (Non sono sicuro del $3bit per verificare se il comando è Python .)

Se stai usando il Terminale GNOME, ti indirizzerei anche al 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.


1

Non è necessario aggiungere un comando a tutto, puoi effettivamente utilizzare uno script, che lo fa automaticamente per te. Si chiama undistract-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

Qualsiasi giocatore può essere usato. Sto aggiungendo cvlcper completezza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.