0

我需要帮助来监视 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}`);
});

终端上的标准输出:

C:\Users\Admin\Desktop>node test.js 标准输出:Tool zur Imageverwaltung f�r die Bereitstellung 版本:10.0.17763.1

标准输出:Bereitstellung des Abbilds wird aufgehoben

[= 2.0% ]

...

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

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

标准输出:Der Vorgang wurde erfolgreich bedet。

子进程以代码 0 退出

C:\用户\管理员\桌面>

我不明白为什么进度条不写入标准输出/标准错误。显示/渲染进度条时不会触发“数据”事件

有人可以帮我在 cb/函数中将进度条作为字符串传递吗?

4

1 回答 1

1

回调 get 被触发,但 console.log 不起作用(我不知道确切原因,我认为是因为进度条在同一行呈现 \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)

    }
		
                            };

现在它可以工作了,;)

于 2018-12-25T23:19:04.043 回答