使用 Platypus,我创建了一个运行以下 shell 脚本的简单应用程序:
cd
if [ -e /Applications/Music.app/Contents/Resources/Music.py ]; then
export PATH=$PATH:/Applications/Music.app/Contents/Resources
cd "/Applications/Music.app/Contents/Resources"
EXTENSION=`osascript -e 'tell application (path to frontmost application as text) to display dialog "Do you want to enable extensions during this session?" buttons {"Yes", "No"} with icon file "Applications:Music.app:Contents:Resources:alert.icns"'`
if [ "$EXTENSION" == "button returned:Yes" ]; then
python Music.py arg1 >> music.txt &
else
python Music.py arg2 >> music.txt &
fi
else
osascript -e 'tell application (path to frontmost application as text) to display dialog "Please move this application into your native applications folder (/Applications)." buttons {"OK"} with icon stop'
osascript -e 'quit app "Music.app"'
fi
“Music.py”脚本在无限循环中运行,不断地从大约 80 个 URL 中选择一个,使用 chromedriver 在 Selenium 上加载。每个 URL 加载一首特定的歌曲,当歌曲播放完毕后,Python 脚本会在可能的歌曲 URL 数组中随机选择另一个位置并加载相应的歌曲(因此它基本上会随机播放给定的播放列表)。
可以使用命令暂停播放kill -STOP [pid]
并使用命令恢复播放kill -CONT [pid]
。但是,我希望能够通过单击 Mac 扩展坞上的“Music.app”图标(以将此应用程序置于前台并确保它接收所有击键)并使用键盘快捷键来暂停它。
经过一番试验,我发现通过运行命令:
bind '"^P":"ID_PARENT=`pgrep chromedriver` && ID_CHILD=`pgrep -P $ID_PARENT` && echo $ID_CHILD && kill -STOP $ID_CHILD\n"'
bind '"^R":"ID_PARENT=`pgrep chromedriver` && ID_CHILD=`pgrep -P $ID_PARENT` && echo $ID_CHILD && kill -CONT $ID_CHILD\n"'
在我的普通命令行中,我可以分别使用 Ctrl + P 和 Ctrl + R 暂停和恢复进程。但是,当我在 shell 脚本的开头添加这些行时,键盘快捷键仍然没有在应用程序中执行任何操作(击键实际上并未在 shell 脚本中注册)。虽然我可以使用我的默认命令行暂停/播放音乐,但我的目标是创建一个用户友好且完全可移植的应用程序,我希望用户可以完全操纵程序而无需与应用程序本身进行交互.
所以,我的问题是,如何将这些键盘快捷键添加到应用程序本身(由 Platypus.app 创建,基本上只是运行一个 shell 脚本)?如果这很重要,我正在使用 MacOS High Sierra 10.3.5。总的来说,我绝对是编程新手,对 shell 没有过多的经验,以前从未使用过 Platypus.app,所以我对此不熟悉,不知道我想要的是否真的可行。任何帮助表示赞赏。
谢谢!