我正在尝试使用Applescript在Xcode中创建一个应用程序来转换PDF。
问题是我需要Xcode / AppleScript等待每个'do shell script'命令在开始下一个之前完成处理。
有没有办法检测每个脚本是否已完成?
e.g。
tell application "System Events"
do shell script "/opt/local/bin/convert task1.tif output1.pdf"
end tell
tell application "System Events"
do shell script "/opt/local/bin/convert task2.tif output2.pdf"
end tell
谢谢, 安东尼
答案 0 :(得分:5)
首先,从“系统事件”代码块中删除“do shell脚本”行。 “do shell script”命令不需要系统事件。
接下来,您可以强制Applecript不等待shell命令完成,并且还可以在applescript中获取命令的PID(进程ID)。例如,运行此命令。
do shell script "/bin/sleep 5"
您将看到它是一个基本的5秒延迟命令,AppleScript会在将控制权返回给脚本之前等待5秒钟。
现在运行此命令。
do shell script "/bin/sleep 5 > /dev/null 2>&1 & echo $!"
你会看到现在applescript不会等待5秒,你也会得到正在运行的sleep命令的PID。注意我们添加到原始命令末尾的内容以实现这一点。
我们可以使用这个PID。我们可以使用“ps”命令进行重复循环并检查PID是否仍在运行。当sleep命令完成时,PID将不再存在,我们可以使用它作为触发器来知道sleep命令何时结束。
set thePID to do shell script "/bin/sleep 5 > /dev/null 2>&1 & echo $!"
repeat
do shell script "ps ax | grep " & thePID & " | grep -v grep | awk '{ print $1 }'"
if result is "" then exit repeat
delay 0.2
end repeat
return "the process is complete!"
因此,应该为您提供实现目标的工具。祝你好运。