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