无法使用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