Как получить вход из другого файла stdout? - PullRequest
0 голосов
/ 05 марта 2019

Например,

У меня есть этот фрагмент кода в файле (скажем, он называется main.js ):

function main(){

    console.log(5);
}

И у меня есть еще одинфайл, в котором я хочу получить стандартный вывод из main.js .

Мой текущий код:

var readline = require('readline');
const fs = require('fs');

var rl = readline.createInterface({
input : fs.createReadStream("./src/main.js",{encoding: "utf8"}),
output: process.stdout,
terminal: false
})   


rl.on('line',parseCB)
function parseCB (line) {
      process.stdout.write(line+'\n')  //<--- what you expect rl.write to do.
}

Но проблема в том, что createReadStream получает весь файлсодержание.Как я могу получить stdout из main.js в качестве входных данных во втором файле?

1 Ответ

0 голосов
/ 05 марта 2019

Чтобы ваш скрипт выводился на стандартный вывод, вам нужно как-то его выполнить.Ваша первая проблема, однако, заключается в том, что выполнение main.js в том виде, в каком оно есть, фактически ничего не выводит.Вы определяете main(), но вам нужно явно вызвать функцию где-то вроде:

function main(){

    console.log(5);
}

main();

Теперь, если вы запустите node main.js, вы получите ожидаемое 5 на стандартный вывод.

Вотдве опции для доступа к этому выводу в другом скрипте.

Опция 1: выполнить main.js как дочерний процесс script.js

//script.js

const { exec } = require('child_process');
const child = exec('node main.js', (error, stdout, stderr) => {
  if (error) {
    throw error;
  }
  process.stdout.write('Executed main.js and got: ' + stdout)
});

Запуск node script.js приведет к выводу: Executed main.js and got: 5

Вариант 2: выполнить main.js и направить его вывод в script.js

//script.js

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  terminal: false,
});

rl.on('line', (line) => {
  console.log(`Read line: ${line}`);
});

Запуск node main.js | node script.js приведет к выводу: Read line: 5

...