在以下代码中
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');
});
我无法使用ctrl + D触发'end'事件,而ctrl + C只是退出而不触发它。
hello
data: hello
data
data: data
foo
data: foo
^F
data: ♠
^N
data: ♫
^D
data: ♦
^D^D
data: ♦♦
答案 0 :(得分:8)
我也遇到了这个问题并在此找到了答案:Github issue
由Windows本身提供的readline接口(例如您现在使用的接口)不支持^ D.如果您想要更多unix-y行为,请使用readline内置模块并将stdin设置为raw模式。这将使节点解释原始按键,^ D将起作用。请参阅http://nodejs.org/api/readline.html。
如果您使用的是Windows,则readline界面默认不支持^ D.您需要根据链接的说明进行更改。
答案 1 :(得分:5)
我会改变这个:
process.stdin.on('end', function() {
process.stdout.write('end');
});
对此:
process.on('SIGINT', function(){
process.stdout.write('\n end \n');
process.exit();
});
更多资源:process docs
答案 2 :(得分:2)
或者
cat input.txt |节点main.js
答案 3 :(得分:1)
如果您是在Hackerrank代码对工具的上下文中进行操作,那么这是给您的。
该工具的工作方式是您必须在Stdin部分中输入一些输入,然后单击Run,这将使您进入stdout。
在stdin中输入的所有输入行将由代码的process.stdin.on(“ data”,function(){})部分处理,并且输入“结束”后将直接进行处理到process.stdin.on(“ end”,function(){})部分,我们可以进行处理并使用process.stdout.write(“”)在标准输出上输出结果。
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);
});
您可以通过将代码粘贴在代码窗口上方的代码中来检查流程。
答案 4 :(得分:0)
在Mac上使用IntelliJ IDEA从Hackerrank调试代码时,我也遇到了这个问题。 需要说的是,如果没有IDEA,则在终端中执行完全相同的命令-一切正常。
起初,我发现了这一点:IntelliJ IDEA: send EOF symbol to Java application-令人惊讶的是, Cmd + D 可以正常工作并发送EOF。
然后,进入IDEA设置,我发现“其他->发送EOF”,默认情况下为 Cmd + D 。将第二个快捷方式添加到该快捷方式( Ctrl + D )之后-一切都按我以前的方式工作。