首页 > 解决方案 > 如何在 JXA 中启动异步后台进程

问题描述

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

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

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

问题是,在你这样做之后,应用程序进程会停止,因为 shell 脚本实际上并没有退出。

那么......我们只需要让服务器作为后台进程运行对吗?不幸的是,我尝试过的所有事情都没有将控制权转移回 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. 尝试了一个 shell 脚本来启动服务器并以exit 0
  7. 尝试cron启动将立即启动将启动服务器的 shell 脚本的作业,但 CRON 似乎存在沙盒问题。
  8. 各种黑客$.NSTask

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

标签: javascriptmacoscocoaautomatorjavascript-automation

解决方案


因此,在系统重新启动后,事实证明这是可行的:

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

(感谢 StackOverflow 成为我的橡皮鸭。)


推荐阅读