检测node.js中控制台输出的结束

时间:2016-07-25 20:06:29

标签: javascript node.js child-process

var cp = require("child_process");

var proc = cp.spawn("cmd");
proc.stdout.on("data", data => console.log("Data:", data.toString()));
proc.stdin.write("help\n");
proc.stdin.write("help\n");

在上面的代码片段中,您将如何检测流何时完成特定命令的写入(即,如果这些命令在终端中执行,它会显示一个闪烁的光标,您可以输入文本)?

我已经尝试过使用侦听事件end,但这似乎只是在进程结束时被触发。

2 个答案:

答案 0 :(得分:1)

除非您正在执行的程序具有明确定义的输出格式(例如换行符分隔的JSON,XML等),否则没有明确的方法可以知道。无论哪种方式,您都必须对程序输出执行某种解析(以及可能的缓冲)。

答案 1 :(得分:0)

这可以通过给stdin一个字符串来解决,该字符串将在执行原始命令时回显给你,你知道执行的字符串没有不需要的效果,并且可能不会输出到stdout命令例如对于给定的例子:

var cp = require("child_process");

var proc = cp.spawn("cmd");
proc.stdout.on("data", data => {
    var str = data.toString();
    console.log(str)
    if(str.search("string to be detected") !== -1){
        console.log("Command finished!");
    }
});
proc.stdin.write("help\n");
proc.stdin.write("string to be detected\n");

另外,您可以等待响应的某些功能,该功能指示命令输出的结束,例如换行符或新提示符,如@mesdex和@ user866762所建议