无法使用node.js获取完整的stdout

我在我的应用程序中使用以下代码:

var path = app.getAppPath(); var spawn = require('child_process').spawn; const child = exec(`"${path}\\PC-BASIC\\a.bat"`, []); var stdout = ''; var stderr = ''; child.stdout.on('data', function(buf) { //console.log('[STR] stdout "%s"', String(buf)); stdout += buf; }); child.stderr.on('data', function(buf) { //console.log('[STR] stderr "%s"', String(buf)); stderr += buf; }); child.on('close', function(code) { console.log('[END] code', code); console.log('[END] stdout "%s"', stdout); console.log('[END] stderr "%s"', stderr); }); 

当我从命令行(DOS)运行a.bat。 我得到确切的结果。 但是当我从我的电子应用程序运行它我在控制台上写下面:

  [END] code 0 [END] stdout " D:\Documents\Nauman Umer\New folder\electron-quick-start>"C:\Program Files (x86)\PC-BASIC\pcbasic.com" --load="ART.BAS" --convert=A " [END] stderr "" 

但预计是:

  [END] code 0 [END] stdout " D:\Documents\Nauman Umer\New folder\electron-quick-start>"C:\Program Files (x86)\PC-BASIC\pcbasic.com" --load="ART.BAS" --convert=A [FILE TEXT AS IN OUTPUT OF BAT] " [END] stderr "" 

我也尝试直接从命令行而不是从应用程序执行pcbasic ,但结果是一样的。

如果subprocess使用GetConsoleMode检测它是否在控制台中运行,请尝试在代码的第3行中使用spawn()而不是exec()调用它。

child_process.exec()启动一个控制台,然后启动该控制台内的程序 – 所以由a.bat调用的subprocessa.bat看到一个控制台,并可能使用控制台API,正如@slebetman所build议的那样。

child_process.spawn()直接启动程序,并通过pipe道使其标准输出可用,所以subprocess不应该看到一个控制台(不能使用控制台API)。

详情请参阅: https : //nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options