Монитор dism.exe от nodejs - PullRequest
       34

Монитор dism.exe от nodejs

0 голосов
/ 26 декабря 2018

Мне нужна помощь, чтобы следить за прогрессбаром от dism.exe в системах Windows.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> узел test.js Стандартный вывод: инструмент zur Imageverwaltung f�r die Bereitstellung Версия: 10.0.17763.1

стандартный вывод: Bereitstellung des Abbilds wird aufgehoben

[= 2.0%]

...

[=========================== 99,0% =========================]

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

stdout: Der Vorgang wurde erfolgreich beendet.

дочерний процесс завершен с кодом 0

C: \Users \ Admin \ Desktop>

Я не понимаю, почему индикатор выполнения не пишет в stdout / stderr.Событие «data» не вызывается, когда отображается индикатор выполнения / renderd

Может ли кто-нибудь помочь мне передать индикатор выполнения в виде строки в cb / function?

1 Ответ

0 голосов
/ 26 декабря 2018

Обратный вызов 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)

    }
		
                            };

И теперь все работает;)

...