监视来自nodejs的dism.exe

时间:2018-12-25 22:43:58

标签: node.js progress monitor dism

我需要帮助来监视Windows系统上dism.exe的进度条。 从我的node.js脚本中生成了dism.exe:

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}`);
});

终端上的标准输出:

  

C:\ Users \ Admin \ Desktop>节点test.js   标准输出:工具zur Imageverwaltung   从前版本:10.0.17763.1

     

标准输出:Abbilds wird aufgehoben

     

[= 2.0%]

     

...

     

[============================ 99.0%================== ========]

     

[========================== 100.0%=================== =========

     

标准输出:Der Vorgang wurde erfolgreich bedet。

     

子进程已退出,代码为0

     

C:\ Users \ Admin \ Desktop>

我不明白为什么进度条不写到stdout / stderr。 显示/渲染进度条时不会触发“数据”事件

有人可以帮助我让进度条作为字符串在cb / function中传递吗?

1 个答案:

答案 0 :(得分:1)

触发了回调get,但是console.log无法正常工作(我不知道为什么,我认为是因为progressbard在同一行中用\ r呈现并替换console.log中的文本)

与util.insepct我从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)

    }
		
                            };

现在它可以工作了;;)