无法使用node.js获取完整的标准输出

无法使用node.js获取完整的标准输出,node.js,electron,Node.js,Electron,我正在我的应用程序中使用以下代码: 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 "

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

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)运行.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
,但结果是一样的。

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

child\u process.exec()
启动一个控制台,然后启动该控制台内的程序-因此由
a.bat调用的子进程可以看到一个控制台,并可以使用控制台API,如@slebetman所建议的

child\u process.spawn()
直接启动程序,并通过管道使其标准输出可用,因此子进程不应看到控制台(也不能使用控制台API)


有关详细信息,请参见此处:

您确定程序会打印到标准输出吗。并非Windows上的所有程序都打印到标准输出。有些人直接调用控制台API来打印他们的输出。这是一个python程序,使用
sys.stdout.write()
来写入控制台。我正在使用这个代码
const spawn=require('child_process')。spawn;const ls=spawn(“D:\\Documents\\Nauman-Umer\\New folder\\electron-quick start\\PC-BASIC\\a.bat”,[]);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 exit with code${code}`);})但请注意获取任何内容输出为:D:\Documents\Nauman Umer\New folder\electron quick start>“D:\Documents\Nauman Umer\New folder\electron quick start\PC-BASIC\pcbasic.com”-load=“ART.BAS”-convert=子进程以代码0退出