2013-03-06 71 views
13

例如緣故,我跑在節點用下面的代碼(名爲server.js)最基本的網絡服務器(我使用Windows):的NodeJS顯示運行子進程的輸出(窗口)

var http = require('http'); 
     http.createServer(function (req, res) { 
     res.writeHead(200, {'Content-Type': 'text/plain'}); 
     res.end('Hello World\n'); 
     }).listen(1337, '127.0.0.1'); 
    console.log('Server running at http://127.0.0.1:1337/'); 

我想運行這是一個子進程,並正在與以下成功地這樣做:

var exec = require('child_process').exec; 
var serv = exec('node server.js', function(error, stdout, stderr){ 
    console.log('outputs & errors:' + error, stdout, stderr); 
}); 

不過,我什麼也得不到當我運行第二個文件。沒有「輸出&錯誤」,否「服務器正在......運行」。如果我在瀏覽器中輸入localhost:1337,我會得到「hello world」,所以我知道它正在運行。有沒有辦法管這個「服務器正在運行...」,所以我可以「確定」它正在監聽?

回答

20

Exec將返回STDOUTSTDERR當孩子完成,看到exec。這就是爲什麼當服務器啓動時你看不到任何輸出。

你想要的是fork,它會自動子進程STDOUTSTDERR連接到你的父母。如果你的子進程是一個節點進程,這是首選的方式。

如果你想使用EXEC您可以使用子processe的流,讓您的數據,例如:

child.stdout.pipe(process.stdout); 
child.stderr.pipe(process.stderr); 
+0

太棒了。我曾看過產卵,但忽視了看Fork,這看起來正是我需要的。 – AberZombie 2013-03-06 21:30:09

+0

在流式傳輸子標準輸出時可以使着色工作嗎?例如,我正在執行另一個gulp命令,通常它有一個很好的顏色輸出,但是當兩個管道連接時,孩子輸出的輸出全部顯示爲白色字符,以消除着色。 – Corneliu 2015-11-20 23:49:44

+1

我找到了答案: http://stackoverflow.com/questions/7725809/preserve-color-when-executing-child-process-spawn – Corneliu 2015-11-20 23:52:20

0
var child_process = nw.require('child_process'); 
var spawn = child_process 

//下面是關於Windows和我的記錄輸出和錯誤給我的記錄

var proc = spawn('cmd.exe', ['/S', '/C', script_path]); 
proc.stdout.on('data', function(data) { 
     logger(logtag, 'proc_stdout: ' + data); 
}); 

proc.stderr.on('data', function(data) { 
    logger(logtag, 'proc_stderr: ' + data); 
}); 
相關問題