AppleScript-等待shell脚本完成
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AppleScript-等待shell脚本完成相关的知识,希望对你有一定的参考价值。
我编写了一个命令行工具来从IMDB中获取电影信息。它使用javascript并称为movinfo。我在AppleScript中运行它:
tell application "System Events"
set movT to "Back-to-the-future"
set exportPath to "export PATH=$PATH:/usr/local/bin:;"
set oriInfo to do shell script exportPath & "movinfo " & quoted form of movT
return oriInfo
end tell
效果很好。但是有时movinfo需要很长时间才能从Internet上获取信息。所以我想添加一个函数来检查是否已完成获取。我首先尝试“忽略...结束忽略”结构:
tell application "System Events"
ignoring application responses
set movT to "Back-to-the-future"
set exportPath to "export PATH=$PATH:/usr/local/bin:;"
set oriInfo to do shell script exportPath & "movinfo " & quoted form of movT
end ignoring
end tell
tell application "System Events"
repeat 30 times
try
return oriInfo
exit repeat
on error
delay 1
end try
end repeat
do shell script "killall System\ Events"
end tell
但是这不起作用。也许我可以使用命令行工具做一些事情来完成这项工作。但是我真的对JavaScript和CLI不太了解。我想在AppleScript中做到这一点。希望有人可以告诉我代码有什么问题,或者如何在AS中做到这一点?
请注意,我没有movinfo
实用程序(您忽略了提供链接的功能),所以我无法对此进行测试,但它应该可以正常使用。
首先(正如vadian在评论中指出的那样),在使用它们时,您不需要系统事件告诉块,因此,我对其进行了重组。这里的技巧是分离movinfo实用程序,以便它作为独立于脚本的进程运行,将电影信息写入~/movieInfo.txt
的文件中。然后,脚本使用[系统事件]从do shell script
中恢复进程pid,并等待实用程序结束,以测试具有该pid的进程是否仍在运行。当过程结束时,该脚本将文件中的信息读回到oriInfo
变量中。有关Unix技巧的问题,请参见:Technote 2065。
-- set output file path
set movieInfoFile to POSIX path of (path to home folder from user domain) & "movieInfo.txt"
set movT to "Back-to-the-future"
set exportPath to "export PATH=$PATH:/usr/local/bin:;"
-- run and detach utility, returning its process id
set procID to do shell script exportPath & "movinfo " & quoted form of movT & " &> " & movieInfoFile & " & echo $!"
repeat 30 times
tell application "System Events"
-- test if pid is still active
set isStillRunning to count of (every process whose unix id is procID)
end tell
if isStillRunning = 0 then
--not active, so proceed
exit repeat
else
delay 1
end if
end repeat
-- pull info from file
set fp to open for access movieInfoFile
set oriInfo to read fp
close access fp
以上是关于AppleScript-等待shell脚本完成的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法通过 Shell 脚本、AppleScript 或 Automator 工作流程触发热键/键盘快捷键?
使用 shell 脚本或 AppleScript 将子文件夹中特定文件类型的所有文件压缩到每个子文件夹一个文件中
Python subprocess.call 不等待进程完成搅拌机