Como posso tocar um som quando a execução do script está pronta?

44

De vez em quando, estou executando alguns scripts python que demoram muito para serem executados.

Eu os executo assim: $ time python MyScript.py

Como posso tocar um som assim que a execução do script é concluída?

Eu uso o Ubuntu 10.10 (desktop Gnome).

Martin Thoma
fonte
Você está usando bashou zsh? Na verdade, existem algumas maneiras de fazer isso acontecer automaticamente, mas elas são bastante envolvidas e dependem de qual shell você está usando.
1111 Mikel
$ echo $ SHELL retorna "/ bin / bash"
Martin Thoma

Respostas:

39

Anexe qualquer comando que reproduza um som; isso pode ser tão simples quanto

$ time mycommand; printf '\7'

ou tão complexo quanto

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

(Os comandos assumem que o pulseaudio está instalado; substitua o seu reprodutor de som, que dependerá do ambiente da área de trabalho.)

geekosaur
fonte
6
+1 paplayé provavelmente o melhor comando a ser usado para reproduzir um som em um sistema Linux "moderno".
Mikel
4
printf '\ 7' não funciona para mim, mas esse comando funcionou como eu queriatime 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 mim (a reprodução não funciona; (git shell)), mas é apenas um bip muito pequeno . Existem mais códigos que emitem outros sons? Eu tentei \6, \8mas eles são alguns personagens.
laggingreflex
2
@laggingreflex Não, \7(BEL) geralmente é o único caractere que possivelmente aciona um som (consulte o artigo da Wikipedia Caractere de controle ); note que também nem sempre é possível emitir um som.
Musiphil
3
@laggingreflex Você provavelmente não precisa mais disso, mas apenas para risos;)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'

Loop infinito com -wse você precisar de motivação extra:

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

Pré-instalado no 14.04 via pacote speech-dispatcher: http://releases.ubuntu.com/trusty/ubuntu-14.04.4-desktop-amd64.manifest para cegos, suponho?

Adicione também um pop-up

Esta combinação é um salva-vidas ( bsignifica beep):

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

e depois:

super-slow-command;b

Se eu estiver em algum lugar da sala, ouvirei e saberei que o longo trabalho está feito.

Caso contrário, verei o pop-up quando voltar ao meu computador.

Por favor, digite seu e - mail do Facebook para receber um link de criação de senha.Enviar por e - mailBlogThis ! Compartilhar no TwitterCompartilhar no FacebookCompartilhar com o Pinterest

Ciro Santilli adicionou uma nova foto
fonte
Para obter a spd-sayferramenta associada speech-dispatcher, pode ser necessário instalar um subpacote como speech-dispatcher-utils(Fedora 24).
dfarrell07
9

Basta escolher um som no seu disco rígido e colocar um comando para tocá-lo logo após o comando que você está esperando; eles acontecerão sequencialmente:

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

(Você pode usar qualquer jogador, naturalmente). Eu tenho um script chamado alertdoneque toca um tom e mostra um alerta de libnotify quando executado; Eu o uso exatamente nesta ocasião:

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

É realmente simples, por isso, se você quiser fazer seu próprio você pode basear-lo neste (mina requer notify-more, mplayere ~/tones/alert_1.wavembora):

#!/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
fonte
2
notify-moreou notify-sendpoderia realmente ser alternativas úteis para tocar um som.
Mikel
@ Mikel, sou completamente viciado em libnotify; tudo no meu sistema aparece notificações
Michael Mrozek
8
time python MyScript.py; play /path/so/sound.ogg

playé um reprodutor de sons muito básico (sem interface do usuário) do pacote sox Instale o sox http://bit.ly/software-small . Você pode substituí-lo por qualquer outro reprodutor de som controlado por linha de comando.

Gilles 'SO- parar de ser mau'
fonte
Yep, play, aplay, ou paplay. (Sistema de meu Ubuntu tem aplaye paplaypor padrão.)
Mikel
1
time python MyScript.py -n 40; paplay /usr/share/sounds/ubuntu/stereo/desktop-login.oggfuncionou, obrigado.
Martin Thoma
5

Pessoalmente, eu uso my-script && notify-send "done". Isso envia uma notificação da área de trabalho, que no Linux Mint (Cinnamon) se parece com:

insira a descrição da imagem aqui

eeze
fonte
3

Você também pode fazer isso acontecer automaticamente.

Vou mostrar-lhe como entrar zshe depois adicionar informações sobre bash.

A essência é assim:

preexec()
{
    starttime=$SECONDS
}

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

Você também pode fazê-lo apenas se o programa for Python, por exemplo

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
}

Em bash, a melhor maneira é fazer o download do preexec.bash.txt e fornecê -lo (por exemplo, . ~/preexec.bash.txtna parte superior do seu ~/.bashrc, em seguida, o acima (ou algo próximo a ele) deve funcionar. (Não tenho certeza do $3bit para verificar se o comando é Python .)

Se você estiver usando o Terminal GNOME, eu também indicaria o Terminal GNOME intermitente . É um patch que escrevi que faz o terminal piscar quando um comando é feito, para que você possa usar a tecla Alt-Tab com outra coisa e avisar quando terminar.

Mikel
fonte
1

Você não precisa adicionar um comando a tudo; na verdade, você pode usar um script, que faz isso automaticamente para você. Ele é chamado de distração-me e está disponível no Github.

exemplo

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

agora inicie o novo bash e você está pronto. Som e alerta podem ser alterados modificando o script.

Jakub Lucký
fonte
-1

Qualquer jogador pode ser usado. Estou adicionando cvlcpor completo.

nponeccop
fonte