我需要帮助在windows系统上从dism.exe监视进度条。dism.exe是从我的node.js脚本生成的:
const { spawn, exec } = require('child_process');
const ls = exec('dism.exe /Unmount-Image /MountDir:"C:\WinPE_amd64\mount" /discard');
ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
ls.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
ls.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
终端上的stdout:
C:\Users\Admin\Desktop>节点测试.jsstdout:工具zur Imageverwaltungf�r die Bereitstellung版本:10.0.17763.1
标准输出:Abbilds的Bereitstellung连接到
[=2.0%]
=============================99.0%=========================]
===========================100.0%=========================]
标准输出:Vorgang先生已经去世。
子进程退出,代码为0
C: \用户\管理员\桌面>
我不明白为什么progressbar不写入stdout/stderr。当进度条显示/呈现时,不会触发"数据"事件
有人能帮我把progressbar作为字符串在cb/函数中传递吗?
回调get被触发,但console.log不起作用(我不知道确切的原因,我想是因为progressbard在同一行中用呈现,并替换console.log中的文本)
使用util.inspct,我可以从dism获得确切的输出。我的回拨:
const handleProgress = function handleProgress(str) {
str = util.inspect(str);
if (str.substring(0, 4) == "'\r[") {
let precent = str.split("%")[0];
precent = precent.replace(/=/g, "");
precent = precent.substring(4);
precent = Number(precent);
console.log(precent);
//console.log(">> done %d%%", precent);
//socket.emit("installation.progress", precent);
} else {
// normal "stat" feedback
console.log("IN CB", str)
}
};
现在它起作用了;)