如何在 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 应用程序。
这是我尝试过的方法:
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!");
(感谢 Whosebug 作为我的 rubber duck。)
我正在尝试从 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 应用程序。
这是我尝试过的方法:
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!");
(感谢 Whosebug 作为我的 rubber duck。)