例如,
我在文件中有这段代码(假设它叫做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作为第二个文件中的输入?
要让您的脚本在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