AppleScript-等待shell脚本完成

敢说敢作敢为, 无怨无恨无悔。这篇文章主要讲述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 telltell 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实用程序(您忽略了提供链接的功能),所以我无法对此进行测试,但它应该可以正常使用。
【AppleScript-等待shell脚本完成】首先(正如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


    推荐阅读