在nodejs(windows)中显示正在运行的子进程'输出

时间:2013-03-06 20:49:47

标签: node.js exec child-process

例如,我正在运行节点中最基本的webServer(我使用的是Windows),其中包含以下代码(名为server.js):

    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”,所以我知道它正在运行。有没有办法管道“服务器正在运行......”所以我可以“肯定”它在听?

3 个答案:

答案 0 :(得分:24)

当孩子完成后,Exec将返回STDOUTSTDERR,请参阅 exec 。这就是为什么在服务器启动时看不到任何输出的原因。

您想要的是 fork ,它会自动将子流程STDOUTSTDERR与您的父流程相关联。如果您的子进程是节点进程,这是首选方法。

如果你想使用exec,你可以使用子进程的流来获取你的数据,例如:

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

答案 1 :(得分:0)

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

//以下是在Windows上,我将stdout和stderr记录到我的记录器

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

答案 2 :(得分:0)

只需指定您希望子进程继承父进程的stdio:

require('child_process').exec('node server.js', { stdio: 'inherit' });