java - 引发 Java 错误时停止运行 .jar 的 AppleScript
问题描述
我有一个用于运行 .jar 文件的 AppleScript。.jar 文件采用最初通过命令行输入的几个输入,但现在我输入 .csv 并自动读入 .jar。由于未知原因,有时无法正确读取 CSV 中的数字,从而导致NumberFormatException
Java 代码中出现 a。但是,我的脚本没有中断,而是不断尝试在无限循环中输入无效输入。有没有办法修改我的代码,以便当 .jar 引发错误时,脚本会停止?
这是我当前的代码:
on RunFile(jar_location)
do shell script "cd " & jar_location & " ; cat 'prompt.csv' | sh 'runScript.sh' 'WSO'"
end RunFile
解决方案
在评论中讨论了这一点之后,很明显问题在于 .jar 文件试图进行交互——在光标处要求一些输入——而 AppleScript 的do shell script
设计并不是为此而设计的。AppleScript 可以从 shell 获取错误和输出,但它不能将响应反馈给 shell,或者判断 shell 脚本是否正在等待输入。
如果 .jar 文件无法在非交互模式下运行,那么 AppleScript 确保进程结束的唯一方法是获取其进程 ID 号,等待一段合理的时间,然后向其发送终止信号。该脚本如下所示:
on RunFile(jar_location)
set pid to do shell script "cd " & jar_location & " ; cat 'prompt.csv' | sh 'runScript.sh' 'WSO' &> /dev/null & echo $!"
-- wait 5 seconds, or whatever seems appropriate for the task to complete
delay 5
try
do shell script "kill " & pid
end try
end RunFile
附加的&> /dev/null & echo $!
短语分离了 shell 脚本,允许 AppleScript 向前移动,并返回进程的进程 ID 以供以后使用。我已将 kill 信号放在 try 块中,以便在进程已正常退出时脚本不会抛出错误。
推荐阅读
- c++ - 可变参数函数模板、参数顺序和推导
- angular - 基于令牌的身份验证 - 使用 ASP.Net Core API 在 Angular 4 应用程序中进行授权
- python-3.x - 解析通配符 FQDN - python
- database - 如何知道查询中是否有检索到的行 | clickhouse 和 GOlang
- python - 如何在 Python 中使用另一个变量访问命名空间变量
- react-native - 世博会文件不可读
- mysql - MySQL 写入可能不会更新查询缓存
- azure - 探测状态代码不匹配。收到的状态码与预期的 200-399 不同
- .htaccess - htacess:将所有http重定向到https,除了任何以开头的url
- haskell - 代数数据类型的 Haskell 映射函数