Nodejs 如何触发stdin的end事件
Nodejs 如何触发stdin的end事件
在Node文档Process中,关于stdin的代码如下:
process.stdin.setEncoding('utf8');
process.stdin.on('readable', function() {
var chunk = process.stdin.read();
if (chunk !== null) {
process.stdout.write('data: ' + chunk);
}
});
process.stdin.on('end', function() {
process.stdout.write('end');
});
我在windows环境下,运行效果如下:
第一段输入abc正常输出abc,第二段什么都没输入,居然也输出了,难道不是null吗?
第三段输入ctrl+d
和ctrl+z
,都没有退出。
第四段输入ctrl+c
,才退出,但是没有触发end事件。
请问这里的end
事件如何触发??
5 回复
在readable事件处理中,检测输入结果是否满足结束条件,如是否输入回车,当满足输入结束条件时,使用process.stdin.emit(’end‘)手动触发end事件。
Ctrl-Z要回车后才好使吧,不回车不行
如果你什么字符都没有输入,但是你最后肯定回车了,系统会读入你输入的回车符,并把它作为一个输入,所以你的Null 判断条件要改一下。
在Node.js中,process.stdin
的end
事件会在标准输入流结束时被触发。对于终端环境,通常需要发送特定的终止信号来结束输入流。在Unix系统(如Linux和macOS)中,可以通过发送Ctrl+D
来触发end
事件。而在Windows系统中,需要发送Ctrl+Z
后按回车键。
根据你的描述,在Windows环境下,你需要发送Ctrl+Z
然后按回车键来触发end
事件。Ctrl+C
会中断程序执行,而不是结束输入流。
以下是修改后的代码示例:
process.stdin.setEncoding('utf8');
process.stdin.on('readable', function() {
var chunk = process.stdin.read();
if (chunk !== null) {
process.stdout.write('data: ' + chunk);
}
});
process.stdin.on('end', function() {
process.stdout.write('\nend\n');
});
示例操作步骤
- 运行脚本。
- 输入一些文本,例如
abc
,然后回车。 - 按下
Ctrl+Z
键,然后回车。
这样就会触发end
事件,并打印end
信息。
注意事项
- 在Unix系统中,可以直接使用
Ctrl+D
来触发end
事件。 - 在Windows系统中,需要先按下
Ctrl+Z
,然后回车键来结束输入流。 Ctrl+C
会中断程序执行,而不是结束输入流。