Node.js程序不会停止从stdin读取

时间:2015-03-29 21:53:11

标签: javascript node.js

我正在尝试从stdin读取用户输入,在我的例子中,两个输入在不同的行上输入。但是,当我运行以下代码(node program.js)时,它允许我输入第一个值,然后单击enter并键入第二个值,但是当我单击enter时,它没有运行我的程序的其余部分。如何告诉它停止阅读并继续?

process.stdin.resume();
process.stdin.setEncoding("ascii");
var input = "";
process.stdin.on("data", function (chunk) {
    input += chunk;
});

process.stdin.on("end", function () {  
    lines = input.split("\n");
    var numVals = lines[0];
    process.stdout.write(numVals + "\n");
    var vals = lines[1];
    process.stdout.write(vals+"\n");
});

1 个答案:

答案 0 :(得分:2)

Readable Streams在触发"end"事件之前需要EOT(传输结束)字符。在bash中,这可以使用CTRL + D来完成。如果您想在2次换行后明确停止,请尝试以下操作:

process.stdin.resume();
process.stdin.setEncoding("ascii");

var input = "";

process.stdin.on("data", function (chunk) {

    input += chunk;

    var lines = input.split("\n");

    //If there have been 2 line breaks
    if (lines.length > 2) {

        //Stop reading input
        process.stdin.pause();

        //Process data
        var numVals = lines[0];
        process.stdout.write(numVals + "\n");

        var vals = lines[1];
        process.stdout.write(vals+"\n");
    }
});

你正在重新发明轮子。线路输入通常使用readlineprompt模块进行处理。