Как получить входные данные из стандартного файла другого пользователя?

#javascript #node.js #filestream #stdio

#javascript #node.js #filestream #стандартный вывод

Вопрос:

Например,

У меня есть этот фрагмент кода в файле (допустим, он называется 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 получает все содержимое файла. Как я мог получить стандартный вывод только из main.js в качестве входных данных во втором файле?

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

1. что вы подразумеваете под стандартным выводом? вы хотите вызвать скрипт с помощью node script.js а затем извлечь stout из другого файла?

Ответ №1:

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

 function main(){

    console.log(5);
}

main();
  

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

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

Вариант 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