Wie kann ich einen Sound abspielen, wenn die Skriptausführung fertig ist?

44

Ich führe von Zeit zu Zeit einige Python-Skripte aus, deren Ausführung ziemlich lange dauert.

Ich führe sie so aus: $ time python MyScript.py

Wie kann ich einen Sound abspielen, sobald die Ausführung des Skripts abgeschlossen ist?

Ich benutze Ubuntu 10.10 (Gnome Desktop).

Martin Thoma
quelle
Benutzt du bashoder zsh? Es gibt tatsächlich einige Möglichkeiten, wie dies automatisch geschehen kann, aber sie sind sehr aufwendig und hängen davon ab, welche Shell Sie verwenden.
Mikel
$ echo $ SHELL gibt "/ bin / bash" zurück
Martin Thoma

Antworten:

39

Hängen Sie einen Befehl an, der einen Sound wiedergibt. das könnte so einfach sein wie

$ time mycommand; printf '\7'

oder so komplex wie

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

(Bei den Befehlen wird davon ausgegangen, dass pulseaudio installiert ist. Ersetzen Sie den Sound-Player, der von Ihrer Desktop-Umgebung abhängt.)

Geekosaurier
quelle
6
+1 paplayist wahrscheinlich der beste Befehl, um einen Sound auf einem "modernen" Linux-System abzuspielen.
Mikel
4
printf '\ 7' funktioniert bei mir nicht, aber dieser Befehl hat so funktioniert, wie ich es wolltetime 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'funktioniert bei mir (paplay nicht; (git shell)) aber es ist nur ein sehr kleiner bip . Gibt es mehr Codes, die andere Geräusche machen? Ich habe es versucht \6, \8aber es sind einige Charaktere.
Laggingreflex
2
@laggingreflex Nein, \7(BEL) ist normalerweise das einzige Zeichen, das möglicherweise einen Ton auslöst (siehe Wikipedia-Artikel Steuerzeichen ). Beachten Sie, dass es möglicherweise auch nicht immer einen Ton gibt.
Musiphil
3
@laggingreflex Du brauchst das wahrscheinlich nicht mehr, sondern nur zum Lachen;)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'

Endlosschleife mit, -wwenn Sie zusätzliche Motivation benötigen:

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

Vorinstalliert am 14.04 via Paket speech-dispatcher: http://releases.ubuntu.com/trusty/ubuntu-14.04.4-desktop-amd64.manifest für Blinde nehme ich an?

Fügen Sie auch ein Popup hinzu

Diese Combo ist ein Lebensretter ( bsteht für beep):

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

und dann:

super-slow-command;b

Wenn ich irgendwo im Raum bin, werde ich es hören und wissen, dass die lange Arbeit erledigt ist.

Andernfalls wird das Popup angezeigt, wenn ich wieder zu meinem Computer zurückkehre.

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

Ciro Santilli ist ein Schauspieler
quelle
Um das spd-sayzugehörige Tool zu erhalten speech-dispatcher, müssen Sie möglicherweise ein Unterpaket wie speech-dispatcher-utils(Fedora 24) installieren .
dfarrell07
9

Wählen Sie einfach einen Sound auf Ihrer Festplatte und geben Sie einen Befehl ein, um ihn direkt nach dem Befehl abzuspielen, auf den Sie warten. Sie werden nacheinander passieren:

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

(Sie können natürlich jeden Spieler benutzen). Ich habe ein Skript namens alertdone, das einen Ton abspielt und beim Ausführen eine libnotify-Warnung anzeigt. Ich benutze es für genau diesen Anlass:

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

Es ist wirklich einfach, wenn Sie also Ihre eigenen machen wollen Sie es auf dieser Basis kann (meine erfordert notify-more, mplayerund ~/tones/alert_1.wavzwar):

#!/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
quelle
2
notify-moreoder notify-sendkönnte in der Tat nützliche Alternativen zum Abspielen eines Sounds sein.
Mikel
@Mikel Ich bin total libnotify-süchtig. Alles auf meinem System zeigt Benachrichtigungen an
Michael Mrozek
8
time python MyScript.py; play /path/so/sound.ogg

playist ein sehr einfacher (kein UI) Sound-Player aus dem Paket sox Install sox http://bit.ly/software-small . Sie können ihn durch jeden anderen befehlszeilengesteuerten Soundplayer ersetzen.

Gilles 'SO - hör auf böse zu sein'
quelle
Yep, play, aplay, oder paplay. (Mein Ubuntu-System hat aplayund paplaystandardmäßig.)
Mikel
1
time python MyScript.py -n 40; paplay /usr/share/sounds/ubuntu/stereo/desktop-login.ogghat funktioniert, danke.
Martin Thoma
5

Persönlich benutze ich my-script && notify-send "done". Dies sendet eine Desktop-Benachrichtigung, die unter Linux Mint (Cinnamon) folgendermaßen aussieht:

Bildbeschreibung hier eingeben

eeze
quelle
3

Dies kann auch automatisch geschehen.

Ich werde dir zeigen, wie es geht zsh, und dann Infos über hinzufügen bash.

Das Wesentliche sieht so aus:

preexec()
{
    starttime=$SECONDS
}

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

Sie können es auch nur machen lassen, wenn das Programm Python war, z

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 bashist der beste Weg , um Download preexec.bash.txt und Quelle sie (zB . ~/preexec.bash.txtan der Spitze Ihres ~/.bashrc, dann sollte die oben (oder so nahe daran) arbeiten. (Nicht sicher das $3Bit zu überprüfen , ob der Befehl Python .)

Wenn Sie GNOME Terminal verwenden, würde ich Sie auch auf Flashing GNOME Terminal verweisen . Es ist ein Patch, den ich geschrieben habe, der bewirkt, dass das Terminal blinkt, wenn ein Befehl ausgeführt wird. Sie können also mit gedrückter Alt-Tab-Taste einen anderen Befehl aufrufen und wissen dann, wann der Befehl ausgeführt wurde.

Mikel
quelle
1

Sie müssen nicht jedem Befehl einen Befehl hinzufügen, sondern können ein Skript verwenden, das dies automatisch für Sie erledigt. Es heißt undistract-me und ist auf Github erhältlich.

Beispiel

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

Jetzt neue Bash starten und fertig. Ton und Alarm können durch Ändern des Skripts geändert werden.

Jakub Lucký
quelle
-1

Jeder Spieler kann verwendet werden. Ich füge der cvlcVollständigkeit halber hinzu .

nponeccop
quelle