使用鸭嘴兽,我创建了一个简单的应用程序,该应用程序运行以下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”脚本无限循环运行,使用chromedriver不断选择约80个URL之一在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,所以我对此并不熟悉,并且不知道我想要的东西是否真的可能实现。任何帮助表示赞赏。
谢谢!