Monitor dism.exe from nodejs



我需要帮助在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)
}
		
};

现在它起作用了;)

最新更新