2016-09-26 54 views
2

在我的应用程序的完整标准输出:不能得到使用我用下面的代码的node.js

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是一样的。

+1

你确定程序打印到标准输出。并非Windows上的所有程序都打印到标准输出。有些人直接调用控制台API来打印输出。 – slebetman

+0

它的一个python程序并使用'sys.stdout.write()'写入控制台。 –

回答

1

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

child_process.exec()启动控制台,然后启动该控制台内的程序 - 因此,由a.bat调用的子进程会看到一个控制台,并可能使用控制台API,如@slebetman所示。

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

查看详情:https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options

+0

我正在使用此代码'''const spawn = require('child_process')。spawn; const ls = spawn(“D:\\ Documents \\ Nauman Umer \\ New folder \\ electron-quick-start \\ PC-BASIC \\ a.bat”,[]); ('data',(data)=> {console.log('stdout:$ {data}'); }); ('data',(data)=> {0} {'stderr:$ {data}'); }); ('code'{code}'); });'''但是注意得到任何东西 –

+0

输出结果是('close',(code)=> { console.log '''stdout: D:\ Documents \ Nauman Umer \新文件夹\电子快速启动>“D:\ Documents \ Nauman Umer \新文件夹\电子快速启动\ PC-BASIC \ pcbasic.com” - -load =“ART.BAS”--convert = A 使用代码0退出子进程 –

相关问题