javascript - 如何在 JXA 中启动异步后台进程
问题描述
我正在尝试从 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 中尝试了同样的事情
- 尝试了一个 shell 脚本来启动服务器并以
exit 0
- 尝试
cron
启动将立即启动将启动服务器的 shell 脚本的作业,但 CRON 似乎存在沙盒问题。 - 各种黑客
$.NSTask
似乎最终的解决方案将涉及以完全 100% 零知识与 JXA 应用程序分离的方式启动后台进程。
解决方案
因此,在系统重新启动后,事实证明这是可行的:
$.system("nohup python -m SimpleHTTPServer > /dev/null &");
console.log("Non-blocking!");
(感谢 StackOverflow 成为我的橡皮鸭。)
推荐阅读
- apache-nifi - 我们可以编写嵌套的 if else 条件来对 ApacheNifi 中的 CSV 文件的内容执行操作吗?
- flask - 如何在 Flask / Jinja2 / WTForms 中呈现动态数据?
- assembly - REP INSB 是可中断的吗?
- postgresql - Postgresql - jsonb 列中日期字段的索引策略
- swift - 无法将按钮绑定到 AVPlayer
- html - Carousel Bootstrap - 如何更改箭头的颜色?
- javascript - ts:设置一个类中的方法等于另一个类中的方法
- memory - Kubectl 命令随机响应缓慢
- python - 创建一个匹配多于两列的成对数据框
- java - 如何将 Kafka 配置为像 FiFo 队列一样工作?