如何在 JXA 中启动异步后台进程

How to Launch Asynchronous Background Process in JXA

我正在尝试从 JXA(JavaScript 用于自动化)Mac 应用程序获取 HTTP 服务器 运行ning。这部分很简单:

app.doShellScript("python -m SimpleHTTPServer");

(更多信息在这里:https://github.com/JXA-Cookbook/JXA-Cookbook/wiki/Shell-and-CLI-Interactions

问题是,在您完成此操作后,应用程序进程暂停,因为 shell 脚本实际上并未退出。

那么...我们只需要将服务器 运行 作为后台进程就可以了吗?。不幸的是,我尝试过的 none 已将控制权转移回 JXA 应用程序

这是我尝试过的方法:

  1. app.doShellScript("nohup python -m SimpleHTTPServer > /dev/null <&- >&- 2>&- & disown");
  2. app.doShellScript("( python -m SimpleHTTPServer > /dev/null & )");
  3. $.system("( python -m SimpleHTTPServer & )");
  4. 编写了一个 python 脚本来启动另一个 运行 服务器并退出的进程
  5. 在Node.js
  6. 中尝试了同样的事情
  7. 尝试了一个 shell 脚本来启动服务器并以 exit 0
  8. 结束
  9. 尝试启动 cron 作业,该作业会立即启动 shell 脚本,从而启动服务器,但 CRON 似乎存在沙盒问题。
  10. $.NSTask
  11. 的各种技巧

看来最终的解决方案将涉及后台进程的启动方式 完全 100% 零知识分离 来自 JXA 应用程序。

所以在系统重启后,结果证明这是可行的:

$.system("nohup python -m SimpleHTTPServer > /dev/null &");
console.log("Non-blocking!");

(感谢 Whosebug 作为我的 rubber duck。)