Как я могу воспроизвести звук, когда выполнение скрипта готово?

45

Время от времени я выполняю некоторые скрипты на Python, выполнение которых занимает довольно много времени.

Я выполняю их так: $ time python MyScript.py

Как я могу воспроизвести звук, как только закончится выполнение сценария?

Я использую Ubuntu 10.10 (рабочий стол Gnome).

Мартин Тома
источник
Вы используете bashили zsh? На самом деле есть несколько способов сделать это автоматически, но они довольно сложны и зависят от того, какую оболочку вы используете.
Микель
$ echo $ SHELL возвращает "/ bin / bash"
Мартин Тома

Ответы:

40

Добавьте любую команду, которая воспроизводит звук; это может быть так просто, как

$ time mycommand; printf '\7'

или так сложно, как

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

(Команды предполагают, что pulseaudio установлен; замените ваш аудиоплеер, который будет зависеть от среды вашего рабочего стола.)

geekosaur
источник
6
+1 paplay, вероятно, лучшая команда для воспроизведения звука в "современной" системе Linux.
Микель
4
printf '\ 7' у меня не работает, но эта команда работала так, как я хотелtime 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'у меня работает (папайла нет; (git shell)) но это просто очень маленький бип . Есть ли еще коды, которые издают другие звуки? Я пытался \6, \8но они некоторые персонажи.
laggingreflex
2
@laggingreflex Нет, \7(BEL) обычно является единственным символом, который, возможно, вызывает звук (см. статью « Символ управления» в Википедии ); обратите внимание, что он не всегда может издавать звук.
Musiphil
3
@laggingreflex Возможно, вам это больше не нужно, но только для смеха;)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'

Бесконечный цикл, -wесли вам нужна дополнительная мотивация:

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

Предварительно установлено 14.04 с помощью пакета speech-dispatcher: http://releases.ubuntu.com/trusty/ubuntu-14.04.4-desktop-amd64.manifest для слепых, я полагаю?

Также добавьте всплывающее окно

Этот комбо спасатель жизни ( bозначает beep):

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

а потом:

super-slow-command;b

Если я где-то в комнате, я услышу это и узнаю, что долгая работа сделана.

В противном случае я увижу всплывающее окно, когда вернусь к своему компьютеру.

Связанный: https://stackoverflow.com/questions/7035/how-to-show-a-gui-message-box-from-a-bash-script-in-linux

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник
Чтобы spd-sayсвязать инструмент с speech-dispatcher, вам может понадобиться установить подпакет вроде speech-dispatcher-utils(Fedora 24).
dfarrell07
9

Просто выберите звук на жестком диске и введите команду для его воспроизведения сразу после команды, которую вы ожидаете; они будут происходить последовательно:

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

(Вы можете использовать любой плеер, естественно). У меня есть скрипт, alertdoneкоторый воспроизводит звук и показывает предупреждение libnotify при запуске; Я использую это именно для этого случая:

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

Это действительно просто, так что если вы хотите сделать свой собственный вы можете основывать его на это (мое требует notify-more, mplayerи ~/tones/alert_1.wavхотя):

#!/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-moreили notify-sendдействительно может быть полезной альтернативой воспроизведению звука.
Микель
@Mikel Я полностью зависим от libnotify; все в моей системе выскакивают уведомления
Майкл Мрозек
8
time python MyScript.py; play /path/so/sound.ogg

playэто очень простой (без пользовательского интерфейса) звуковой проигрыватель из пакета sox Install sox http://bit.ly/software-small . Вы можете заменить его любым другим звуковым проигрывателем, управляемым из командной строки.

Жиль "ТАК - перестань быть злым"
источник
Да, play, aplayили paplay. (Моя система Ubuntu имеет aplayи paplayпо умолчанию.)
Mikel
1
time python MyScript.py -n 40; paplay /usr/share/sounds/ubuntu/stereo/desktop-login.oggсработало, спасибо.
Мартин Тома
5

Лично я пользуюсь my-script && notify-send "done". Это отправляет уведомление на рабочем столе, которое в Linux Mint (Cinnamon) выглядит следующим образом:

введите описание изображения здесь

Eeze
источник
3

Вы также можете сделать это автоматически.

Я покажу вам, как zsh, а затем добавить информацию о bash.

Суть выглядит так:

preexec()
{
    starttime=$SECONDS
}

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

Вы также можете сделать это, только если программа была на Python, например

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
}

В bash, лучший способ для загрузки preexec.bash.txt и его источника (например , . ~/preexec.bash.txtв верхней части вашего ~/.bashrc, то выше (или что - то близкое к нему) должен работать. (Не уверен насчет $3немного , чтобы проверить , если команда Python .)

Если вы используете терминал GNOME, я бы также указал на мигание терминала GNOME . Это патч, который я написал, который заставляет терминал мигать, когда команда выполнена, поэтому вы можете нажать Alt-Tab для чего-то другого, а затем он сообщит вам, когда это будет сделано.

Mikel
источник
1

Вам не нужно добавлять команду ко всему, вы можете использовать скрипт, который делает это автоматически для вас. Это называется unistract-me и доступно на Github.

пример

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

Теперь начните новый Bash, и все готово. Звук и оповещение можно изменить, изменив скрипт.

Якуб Лаки
источник
-1

Любой игрок может быть использован. Я добавляю cvlcдля полноты.

nponeccop
источник