【问题标题】:Display running child process' output in nodejs (windows)在nodejs(windows)中显示正在运行的子进程的输出
【发布时间】:2013-03-06 20:49:46
【问题描述】:

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

    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”,所以我知道它正在运行。有没有办法通过管道传输“服务器正在运行...”,这样我就可以“确定”它正在监听?

【问题讨论】:

    标签: node.js exec child-process


    【解决方案1】:

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

    您想要的是fork,它会自动将子进程STDOUTSTDERR 连接到您的父进程。如果您的子进程是节点进程,这是首选方式。

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

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

    【讨论】:

    • 太棒了。我看过 spawn,但忽略了 Fork,这似乎正是我所需要的。
    • 流式传输子标准输出时是否可以使着色工作?例如,我正在执行另一个 gulp 命令,该命令通常具有漂亮的彩色输出,但是当连接两个管道时,子 gulp 的输出全部显示为失去颜色的白色字符。
    【解决方案2】:
    var child_process = nw.require('child_process');
    var spawn = child_process
    

    //以下是在windows上,我把stdout和stderr记录到我的logger中

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 目前 (node v17) exec 似乎不支持 stdio 选项,只支持 fork。
      猜你喜欢
      • 2011-06-03
      • 1970-01-01
      • 2017-07-22
      • 2018-10-02
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多