Запуск оболочки из Node.js

#node.js #child-process

#node.js #дочерний процесс

Вопрос:

Я пытаюсь запустить оболочку (оболочку scala) из nodejs. В принципе, я хочу интерактивную оболочку scala, работающую в фоновом режиме, в которую я могу передавать входные данные и получать от нее ответ. Я изучил дочерний процесс в документации nodejs, но мне не удалось заставить его работать. Я пробовал exec, как показано ниже.

 var exec = require('child_process').exec;
var child = exec('scala');

child.stdout.on('data', function(data){
    console.log('from child', data.toString());
});

child.stdin.on('data', function(data){
    console.log('Stdin received', data);
});

child.stderr.on('data', function(data){
    console.log('from child error', data.toString());
});
  

Когда я запускаю программу, дочерний процесс принимает входные данные из stdin (все, что я печатаю) посимвольно. Я хочу отправить строки дочернему процессу и получить от него ответ. Таким образом, передача кода scala типа «val a = 0;» вернет «a: Int = 0» из оболочки scala.

Я попробовал создать функцию дочернего процесса, но она выдает ошибку.

 var spawn = require('child_process').spawn,
child = spawn('scala');

Error: spawn scala ENOENT
    at exports._errnoException (util.js:1036:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
    at onErrorNT (internal/child_process.js:359:16)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)
    at Module.runMain (module.js:592:11)
    at run (bootstrap_node.js:394:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:509:3
  

Ответ №1:

Я попробовал ваш пример кода, и он работает для меня.

 var spawn = require('child_process').spawn,
child = spawn('scala');

child.stdout.on('data', function(data){
    console.log('from child', data.toString());
});

child.stdin.on('data', function(data){
    console.log('Stdin received', data);
});

child.stderr.on('data', function(data){
    console.log('from child error', data.toString());
});
  

.

 Welcome to Scala version 2.11.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_05).
Type in expressions to have them evaluated.
Type :help for more information.
  

Сообщение об ошибке указывает на то, что node не может найти scala. Убедитесь, что scala доступен в path или укажите абсолютный путь к двоичному файлу.

Комментарии:

1. Отлично, спасибо. Я использую Windows, и scala находится на моем пути. Я также включил абсолютный путь, но это не сработало. Тем не менее, я попробовал это на Ubuntu, и это работает. Я посмотрю, смогу ли я выяснить, в чем проблема с Windows.