如何从其他文件stdout获取输入?

问题描述 投票:1回答:1

例如,

我在文件中有这段代码(假设它叫做main.js):

function main(){

    console.log(5);
}

我有另一个文件,我想从main.js获取stdout。

我目前的代码是:

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作为第二个文件中的输入?

javascript node.js filestream stdio
1个回答
1
投票

要让您的脚本在stdout上输出,您需要以某种方式执行它。你的第一个问题是执行main.js实际上不会输出任何东西。你定义main()但你需要明确地调用函数,如:

function main(){

    console.log(5);
}

main();

现在,如果您运行node main.js,您将获得stdout上预期的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

© www.soinside.com 2019 - 2024. All rights reserved.