【发布时间】:2019-10-25 06:00:33
【问题描述】:
我正在尝试从 JXA(自动化 JavaScript)Mac 应用程序中运行 HTTP 服务器。这部分很简单:
app.doShellScript("python -m SimpleHTTPServer");
(更多信息:https://github.com/JXA-Cookbook/JXA-Cookbook/wiki/Shell-and-CLI-Interactions)
问题是,在你这样做之后,应用程序进程会停止,因为 shell 脚本实际上并没有退出。
那么……我们只需要让服务器作为后台进程运行,对吧?不幸的是,我尝试过的所有方法都没有将控制权转移回 JXA 应用程序。
这是我尝试过的:
app.doShellScript("nohup python -m SimpleHTTPServer > /dev/null <&- >&- 2>&- & disown");app.doShellScript("( python -m SimpleHTTPServer > /dev/null & )");$.system("( python -m SimpleHTTPServer & )");- 编写了一个 python 脚本,该脚本将启动另一个运行服务器并退出的进程
- 在 Node.js 中尝试过同样的事情
- 尝试了一个可以启动服务器并以
exit 0结尾的shell 脚本 - 尝试启动
cron作业,该作业将立即启动 shell 脚本,从而启动服务器,但 CRON 似乎存在沙盒问题。 -
$.NSTask的各种 hack
似乎最终的解决方案将涉及以与 JXA 应用程序完全 100% 零知识分离的方式启动后台进程。
【问题讨论】:
-
app在这种情况下指的是终端对吗?因此,一种解决方案可能是创建两个app对象...一个用于运行 http 服务器,另一个用于执行任何操作
标签: javascript macos cocoa automator javascript-automation