2016-09-26 55 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退出子進程 –

相關問題