gpt4 book ai didi

xcode - 等待 do shell 脚本完成

转载 作者:行者123 更新时间:2023-12-05 01:06:20 25 4
gpt4 key购买 nike

我正在尝试使用 Applescript 在 Xcode 中创建一个应用程序来转换 PDF。

问题是我需要 Xcode/AppleScript 等待每个“执行 shell 脚本”命令完成处理,然后再开始下一个。

有没有办法检测每个脚本都完成了?

例如

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

谢谢,
安东尼

最佳答案

首先,从“系统事件”代码块中删除“执行 shell 脚本”行。 “do shell script”命令不需要系统事件。

接下来,您可以强制 applescript 不等待 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!"

因此,这应该为您提供实现目标的工具。祝你好运。

关于xcode - 等待 do shell 脚本完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20146093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com