Node.js子进程仅在stdout.on之后退出

时间:2016-01-15 10:39:25

标签: javascript node.js socket.io casperjs child-process

我使用带有socket.io的Node.js构建了一个简单的Web界面,我通过开始使用CapserJS子进程来运行浏览器自动化测试。

除非我附加stdout.on('data')处理程序,否则CasperJS子进程无法正常退出。如果我的代码中没有这个处理程序,我的exit处理程序永远不会被调用,CasperJS进程就会被孤立。我究竟做错了什么?我的子进程是否要求我在进程结束之前输出它的输出?

io.on('connection', function (socket) {
   socket.on('run tests', function(data) {
      if (runningProcess) {
         io.emit('alert', 'Please wait for current test run to finish');
         return;
      }

      var command = spawn(
         'casperjs',
         [
            'test',
            'yadda.js',
            '--user="' + data.user + '"',
            '--password="' + data.password + '"',
            '--server="' + data.server + '"',
            '--port="' + data.port + '"'
         ]
      );

      runningProcess = true;

      // Only exits when un-commented
      // command.stdout.on('data', function(data) {
      //    io.emit('line out', data.toString());
      // });

      command.on('exit', function(data) {
         runningProcess = false;
         io.emit('finished');
      });
   });
});

0 个答案:

没有答案