ฉันจะเล่นเสียงได้อย่างไรเมื่อสคริปต์พร้อมใช้งาน?


44

ฉันกำลังดำเนินการอยู่ทุกขณะและจากนั้นสคริปต์งูหลามบางตัวที่ใช้เวลาในการประมวลผลค่อนข้างนาน

ฉันรันพวกเขาเช่นนี้: $ time python MyScript.py

ฉันจะเล่นเสียงได้อย่างไรเมื่อการประมวลผลสคริปต์เสร็จสิ้น

ฉันใช้ Ubuntu 10.10 (เดสก์ท็อป Gnome)


คุณกำลังใช้bashหรือzsh? จริงๆแล้วมีบางวิธีในการทำให้สิ่งนี้เกิดขึ้นโดยอัตโนมัติ แต่พวกมันมีส่วนเกี่ยวข้องและขึ้นอยู่กับว่าคุณใช้เชลล์แบบไหน
Mikel

$ echo $ SHELL ส่งคืน "/ bin / bash"
Martin Thoma

คำตอบ:


39

ผนวกคำสั่งใด ๆ ที่เล่นเสียง นี่อาจจะง่ายเหมือน

$ time mycommand; printf '\7'

หรือซับซ้อนเท่า

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

(คำสั่งสมมติว่ามีการติดตั้ง pulseaudio แทนที่โปรแกรมเล่นเสียงของคุณซึ่งจะขึ้นอยู่กับสภาพแวดล้อมเดสก์ทอปของคุณ)


6
+1 paplayน่าจะเป็นคำสั่งที่ดีที่สุดในการใช้เล่นเสียงบนระบบ Linux ที่ "ทันสมัย"
Mikel

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'งานสำหรับฉัน (paplay ไม่ (คอมไพล์เชลล์)) แต่มันก็เป็นเพียงขนาดเล็กมากBIP มีรหัสอื่นที่ทำให้เกิดเสียงอื่นหรือไม่ ฉันพยายาม\6, \8แต่พวกเขามีตัวละครบางตัว
laggingreflex

2
@laggingreflex ไม่\7(BEL) มักจะเป็นตัวละครเดียวที่อาจทำให้เกิดเสียง (ดูบทความ Wikipedia ตัวละครควบคุม ); โปรดทราบว่าอาจไม่ส่งเสียงเสมอ
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


ในการรับ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

@Mikel ฉันติดการหมิ่นประมาทอย่างสมบูรณ์ ทุกอย่างในระบบของฉันปรากฏขึ้นการแจ้งเตือน
Michael Mrozek

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

playเป็นเครื่องเล่นเสียงขั้นพื้นฐาน (ไม่มี UI) จาก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ได้ผลขอบคุณ
Martin Thoma

5

my-script && notify-send "done"ส่วนตัวผมใช้ สิ่งนี้จะส่งการแจ้งเตือนทางเดสก์ท็อปซึ่งบน Linux Mint (Cinnamon) จะมีลักษณะดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่


3

คุณสามารถทำให้สิ่งนี้เกิดขึ้นโดยอัตโนมัติ

ผมจะแสดงให้คุณเห็นว่าในนั้นเพิ่มข้อมูลเกี่ยวกับzshbash

สาระสำคัญมีลักษณะเช่นนี้:

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 ไปยังสิ่งอื่นจากนั้นมันจะแจ้งให้คุณทราบเมื่อเสร็จสิ้น


1

คุณไม่จำเป็นต้องเพิ่มคำสั่งให้กับทุกสิ่งคุณสามารถใช้สคริปต์ได้จริงซึ่งจะทำสิ่งนี้ให้คุณโดยอัตโนมัติ มันเรียกว่าundistract-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

ตอนนี้เริ่มทุบตีใหม่และคุณถูกตั้งค่า เสียงและการเตือนสามารถเปลี่ยนแปลงได้โดยการแก้ไขสคริปต์


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.