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
,但这似乎只是在进程结束时被触发。
答案 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所建议