在nodejs(windows)中显示正在运行的subprocess的输出

比如说,我使用下面的代码(名为server.js)运行节点(我正在使用windows)中最基本的webServer:

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/'); 

我想把它作为一个subprocess运行,并成功地完成了以下任务:

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

但是,一旦我运行第二个文件,我什么也没有收到。 没有“输出和错误”,没有“服务器运行在…”。 如果我在浏览器中inputlocalhost:1337,我会得到“hello world”,所以我知道它正在运行。 有没有办法pipe这个“服务器运行…”,所以我可以“确定”它正在监听?

当子结束时,Exec将返回STDOUTSTDERR ,请参阅exec 。 这就是为什么当服务器启动时你看不到任何输出。

你想要的是fork ,它会自动将subprocessSTDOUTSTDERR到父进程。 如果你的subprocess是一个节点进程,这是首选的方法。

如果你想使用exec,你可以使用subprocess的stream来获取你的数据,例如:

 child.stdout.pipe(process.stdout); child.stderr.pipe(process.stderr); 
 var child_process = nw.require('child_process'); var spawn = child_process 

//以下是在Windows上,我loggingstdout和stderr到我的logging器

 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); });