NodeJS将process.stdout解析为变量

时间:2014-10-31 12:45:46

标签: node.js stream

我试图从stdout读取并将其放入NodeJS中的变量。这就是我尝试过的:

process.stdout.on('data', function(data) {
    console.log(data.toString())
});

console.log('hello')

我希望它输出两次hello,但它只输出一次。为什么不触发回调?它在使用标准输入时有效..

4 个答案:

答案 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)

我建议以下内容:

  1. 将流程中的标准输出插入到双工流中,您可以在其中创建读取流
  2. 您解析数据,然后可以将其关闭。