0

我是 AppleScript 的新手,但我必须重新创建一个我在 OSX 中为 Windows 编写的批处理文件,而 AppleScript 似乎是最好的方法。基本上,脚本将由另一个程序动态创建然后执行。AppleScript 只需要等待一个进程,我想通过它的进程 ID 来识别它,如果进程在特定时间后仍在运行,则显示一条消息。

这可能吗?如果可以,怎么做?

提前致谢

4

2 回答 2

1

这里有一些东西(希望)让你上路:

  • 终端中的 shell 脚本和 'do shell script' 命令:不知道你对 Unix 的了解程度,但你肯定想去那里学习 bash 的基础知识。有一些限制,您可以通过“do shell script”命令通过 AS 运行 shell 脚本。
  • 动态编写脚本:osascript 和 osacompile 可能会派上用场。请参阅手册页。osascript 可以执行脚本或脚本文本,而 osacompile 可以(!)将文本编译成脚本形式(非文本形式)等等。
  • script waiting/watching process:更多的shell脚本,或者使用Finder(以前称为Scriptable Finder!),即Finder的脚本功能(字典),比如 告诉应用程序“Finder”获取进程名称. shell 版本(可以通过 'do shell script' AS 命令调用)可能是“ps ax | grep Safari | grep -v grep | awk '{print $1}'”(取自 stackoverflow 帖子。我喜欢它是因为如果不匹配,则返回空字符串)。根据您的主脚本将如何运行,了解空闲处理程序在脚本应用程序中的工作方式,以及这与使用 xcode 构建的应用程序(如果这是您要走的路线)或仅使用脚本有何不同。
  • 显示消息:“显示对话框”是超级简单的方法,超时完成(在 n 秒后“放弃”)。(对不起,如果这太简单了,我只是侮辱了你的智慧:-))
  • 其他:看看(除非你已经习惯了脚本编辑环境)微笑。这是我的主要脚本编辑器。
于 2013-10-21T04:06:49.427 回答
1

在网上搜索了更多之后,我最终找到了解决我给定问题的方法。这是我用来检查具有给定 ID 的进程pid是否正在运行的 AppleScript 代码

tell application "System Events"
    set runningApplications to (unix id of every process)
        if (runningApplications contains (pid as integer)) is false then
           -- process is not running
        else
           -- process still running
        end if
end tell

这显然只是一个片段。就我个人而言,我将上述语句放在一个repeat循环中,但这提供了一种检查进程 ID(即unix id)的解决方案。

希望这对其他人有帮助

于 2013-10-21T20:42:06.263 回答