我试图从stdout读取并将其放入NodeJS中的变量。这就是我尝试过的:
process.stdout.on('data', function(data) {
console.log(data.toString())
});
console.log('hello')
我希望它输出两次hello,但它只输出一次。为什么不触发回调?它在使用标准输入时有效..
答案 0 :(得分:8)
您正试图在the Readable Stream API上使用a Writable Stream。具体而言,the process.stdout
stream is for writing to stdout not reading from stdout。您尝试做的事情是不可能的,如果确实有效,会创建一个无限循环,breaks the definition of what stdin and stdout are。
答案 1 :(得分:1)
你不能这样做。阅读@mattr's answer。
相反,您可以加入process.stdout.write
和将所有文字打印到process.stdout
。我在我的Node.js服务器上使用下面的代码。
global.serverLog = "";
process.stdout.write = (function(write) {
return function(string, encoding, fileDescriptor) {
global.serverLog += string;
write.apply(process.stdout, arguments);
};
})(process.stdout.write);
请注意,您也可以对process.stderr
执行相同的操作。
答案 2 :(得分:0)
上面的一个不太混乱的版本是:
process.stdout._orig_write = process.stdout.write;
process.stdout.write = (data) => {
mylogger.write(data);
process.stdout._orig_write(data);
}
答案 3 :(得分:0)
我建议以下内容: