Выполнение команды оболочки с использованием child_process в javascript - PullRequest
0 голосов
/ 05 декабря 2018

Попытка выполнить команду оболочки (любую) из браузера и распечатать результат в пользовательском интерфейсе с помощью child_process.

невозможно получить результаты из командной строки асинхронно. Я что-то здесь упустил?

   const exec = require('child_process').exec;
    app.post('/plan',(req, res) => {

      let cmd = exec('dir');
      let output = "";
      cmd.stdout.on('data', (data) => {
        //console.log(`stderr: ${data}`);
        output += data;
       });
      res.send(output);                          //not working
      console.log(output);                       //its empty
      cmd.stderr.on('data', (data) => {
          console.log(`stderr: ${data}`);
       });
      cmd.on('close', (code) => {
         console.log(`child process exited with code ${code}`);
      });

    });

1 Ответ

0 голосов
/ 05 декабря 2018

Команда оболочки выполняется асинхронно.Вам необходимо отправить ответ из функции обратного вызова, чтобы он отправлял результат по завершении выполнения.

  cmd.stdout.on('data', (data) => {
    output += data;
    res.send(output); 
   });

Может быть чище сделать это так:

const exec = require('child_process').exec;
app.post('/plan',(req, res) => {
  exec('dir', (error, stdout, stderr) => {
    if (error) {
      res.status(500).send(stderr);
      return;
    }
    res.send(stdout);
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...