@Soft_touch_plastic

Почему nodejs child_process spawn неправильно соединяет аргументы с функцией?

Здравствуйте, пользуюсь child_process для запуска джава бота через nodejs оболочку. При запуске через exec все работает нормально, но exec неудобен тем, что буферизирует весь вывод программы и выдает его в конце работы большим бандлом, а хотелось бы реагировать на сообщения, которые бот в stdout выводит. Для этого есть spawn, который позволяет подписываться на сообщения из stdout и stderr, но тут возникает проблема. Запись команды в spawn сделана так, что ты должен вписать отдельно команду, и отдельно передать ее аргументы. За этим кроется проблема, поскольку spawn по всей видимости неправильно склеивает команду с аргументами, и java выдает мне ошибку
Unrecognized option: -jar "E:\Java root\intelliJ IDEA\...."
При выполнении команды через exec все работает нормально. Вот код двух примеров:

const stream = spawn("C:\\Users\\user\\.jdks\\corretto-17.0.4\\bin\\java.exe", [
    '-jar \"E:\\Java root\\intelliJ IDEA\\EnglishStartupBot\\out\\artifacts\\EnglishStartupBot_jar\\EnglishStartupBot.jar\"'
])//выдает ошибку

exec("C:\\Users\\user\\.jdks\\corretto-17.0.4\\bin\\java.exe -jar \"E:\\Java root\\intelliJ IDEA\\EnglishStartupBot\\out\\artifacts\\EnglishStartupBot_jar\\EnglishStartupBot.jar\"", (error, stdout, stderr) => {})
//работает нормально
  • Вопрос задан
  • 23 просмотра
Пригласить эксперта
Ответы на вопрос 1
VoidVolker
@VoidVolker
Внимательнее документацию надо читать:
https://nodejs.org/api/child_process.html#child_pr...
args <string[]> List of string arguments.

Т.е., правильнее будет так:
const stream = spawn("C:\\Users\\user\\.jdks\\corretto-17.0.4\\bin\\java.exe", [
    '-jar',
    "E:/Java root/intelliJ IDEA/EnglishStartupBot/out/artifacts/EnglishStartupBot_jar/EnglishStartupBot.jar"
])
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы