如何从他人的文件标准输出中获取输入?

时间:2019-03-05 07:47:18

标签: javascript node.js filestream stdio

例如,

我在文件中有这段代码(假设它称为 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 中获取 stdout 作为第二个文件中的输入?

1 个答案:

答案 0 :(得分:1)

要使您的脚本在stdout上输出,您需要以某种方式执行它。但是,您的第一个问题是执行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