【问题标题】:nodejs stdin readable event not triggerednodejs stdin可读事件未触发
【发布时间】:2013-08-18 05:11:55
【问题描述】:

process.stdin中没有触发readable事件

test.js

var self = process.stdin, data ;

self.on('readable', function() {
    var chunk = this.read();
    if (chunk === null) {
        handleArguments();
    } else {
       data += chunk;
    }
});

self.on('end', function() {
   console.log("end event",data )
});

然后当我执行node test.js 并开始在控制台中输入时,根本不会触发readable 事件。

请告诉我如何将readable 监听器附加到 process.stdin 流。

【问题讨论】:

    标签: node.js node.js-stream


    【解决方案1】:

    如果您尝试捕捉您在控制台上输入的内容,请尝试以下步骤,

    process.stdin.resume();
    

    process.stdin 以暂停状态启动。您需要将其置于就绪状态。 侦听“数据”事件以捕获在控制台中键入的数据。

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

    我不确定这是否对您的实际问题有所帮助。希望它至少能给您一些见解。

    附加信息:

    readable 事件是在 Node.js v0.9.4 中引入的。因此请检查您使用的节点是否为 gte 0.9.4。

    来自节点 api 文档的注释:

    如果使用了 setEncoding(),'data' 事件会发出一个缓冲区(默认情况下)或一个字符串。

    请注意,添加“数据”事件侦听器会将 Readable 流切换到“旧模式”,即数据一可用就发出,而不是等待您调用 read() 来使用它。

    【讨论】:

    • 我试过这个方法。这行得通。但我想捕捉“可读”事件。
    • 你在哪个节点版本上?
    • 我浏览了 api 文档,并且从 0.9.4 开始在 stream.readable 上引入了“可读”事件。确保您的节点版本是 gte 0.9.4。否则依赖“数据”事件。
    • 哦,你说得对,更新到最新版本后会触发“可读”事件。你在哪里看到的这些信息?它不在 API 文档中。
    • 它没有在文档中的任何地方明确指定。节点,从 0.8 到 0.9 经历了值得称道的变化。我从 0.9 到 0.10 先后浏览了 API,看看这个特定事件是在哪里引入的,并击中了靶心 @0.9.4 :-)
    猜你喜欢
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2019-07-05
    • 2023-02-07
    • 2010-11-08
    相关资源
    最近更新 更多