簡體   English   中英

在node.js中檢測控制台輸出結束

[英]Detect end of console output in node.js

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 ,但這似乎僅在過程完成時觸發。

除非您正在執行的程序具有明確定義的輸出格式(例如,以換行符分隔的JSON,XML等),否則沒有確定的方法知道。 無論哪種方式,您都必須對程序輸出執行某種形式的解析(和可能的緩沖)。

這可以通過給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所建議的那樣,該功能指示命令輸出的結束,例如換行符或新提示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM