Как запустить асинхронный фоновый процесс в JXA - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь запустить HTTP-сервер из приложения Mac JXA (JavaScript для автоматизации).Эта часть проста, как:

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

(Более подробная информация здесь: https://github.com/JXA-Cookbook/JXA-Cookbook/wiki/Shell-and-CLI-Interactions)

Проблема в том, что после того, как вы это сделали, процесс приложения останавливается, потому что сценарий оболочкина самом деле не выходит.

Ну тогда ... нам просто нужно заставить сервер работать как фоновый процесс, верно? К сожалению, ни одна из вещей, которые я пробовал, не вернула управление обратноприложение 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. Пробовал скрипт оболочки, который запускал сервери заканчивается exit 0
  7. Попытка запустить задание cron, которое немедленно запустит сценарий оболочки, запускающий сервер, но, похоже, существуют проблемы с песочницей с CRON.
  8. Различныехаки с $.NSTask

Кажется, что возможное решение будет включатьve фоновый процесс запускается таким образом, что полностью на 100% с нулевым знанием отсоединено от приложения JXA.

1 Ответ

0 голосов
/ 10 июня 2019

Итак, после перезагрузки системы получается, что это работает:

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

(Спасибо, StackOverflow, за то, что я резиновая утка .)

...