Fad*_*dwa 14 events stdin node.js
在以下代码中
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function(chunk) {
process.stdout.write('data: ' + chunk);
});
process.stdin.on('end', function() {
process.stdout.write('end');
});
Run Code Online (Sandbox Code Playgroud)
我无法使用ctrl + D触发'end'事件,而ctrl + C只是退出而不触发它.
hello
data: hello
data
data: data
foo
data: foo
^F
data: ?
^N
data: ?
^D
data: ?
^D^D
data: ??
Run Code Online (Sandbox Code Playgroud)
小智 9
我也遇到了这个问题并在此找到了答案:Github问题
由Windows本身提供的readline接口(例如您现在使用的接口)不支持^ D. 如果您想要更多unix-y行为,请使用readline内置模块并将stdin设置为raw模式.这将使节点解释原始按键,^ D将起作用.见http://nodejs.org/api/readline.html.
如果您在Windows上,则readline界面默认不支持^ D. 您需要根据链接的说明进行更改.
我改变了这个:
process.stdin.on('end', function() {
process.stdout.write('end');
});
Run Code Online (Sandbox Code Playgroud)
对此:
process.on('SIGINT', function(){
process.stdout.write('\n end \n');
process.exit();
});
Run Code Online (Sandbox Code Playgroud)
更多资源:流程文档
小智 5
如果您在 Hackerrank 代码对工具的上下文中执行此操作,那么这适合您。
工具的工作方式是您必须在 Stdin 部分输入一些输入,然后单击 Run 这将带您到 stdout。
在标准输入中输入的所有输入行都将由代码的 process.stdin.on("data",function(){}) 部分处理,一旦输入“结束”,它将直接进入流程.stdin.on("end", function(){}) 部分,我们可以在其中进行处理并使用 process.stdout.write("") 在 Stdout 上输出结果。
process.stdin.resume();
process.stdin.setEncoding("ascii");
var input = "";
process.stdin.on("data", function (chunk) {
// This is where we should take the inputs and make them ready.
input += (chunk+"\n");
// This function will stop running as soon as we are done with the input in the Stdin
});
process.stdin.on("end", function () {
// When we reach here, we are done with inputting things according to our wish.
// Now, we can do the processing on the input and create a result.
process.stdout.write(input);
});
Run Code Online (Sandbox Code Playgroud)
您可以通过在代码窗口上粘贴上面的代码来检查流程。