使用Unix可执行文件的Nodejs子进程

时间:2013-04-19 12:31:02

标签: node.js executable

我遇到'child_process'模块和可执行程序的问题。我想将stdout从可执行文件传递到我的节点进程。

我可以使用简单的命令(如“cat”和“ls”)而不是我的可执行文件来使用它。我正在使用下面的代码。

我的可执行文件在独立运行时将数据记录到终端,所以我不确定为什么这不起作用。节点脚本和可执行文件位于同一目录中,并在MacOS X上运行。

编辑:可执行文件一旦启动就会永久运行。

var cp = require('child_process');

var cat = cp.spawn('cat', ['udpServer.js']);
cat.stdout.on('data', function(m) {
  // This will log just fine!
  console.log('cat');
  console.log(m);
});

var tracker = cp.spawn('./MyExecutable', []);
tracker.stdout.on('data', function(data){
  // This is never logged
  console.log('MyExecutable');
  console.log(data);
});

1 个答案:

答案 0 :(得分:0)

确保您具有可执行命令的正确路径。确保我在生成不在节点进程$PATH变量中的命令时指定绝对路径

var inspect = require('eyespect').inspector();
var path = require('path')
var spawn = require('child_process').spawn
var cmd = path.join(__dirname, 'MyExecutable')
inspect(cmd, 'command to spawn')
var args = []
var tracker = spawn(cmd, args)
tracker.stdout.setEncoding('utf8')
tracker.stderr.setEncoding('utf8')
tracker.stdout.on('data', function (data) {
  inspect('stdout data')
  console.log(data)
})
tracker.stderr.on('data', function (data) {
  inspect('stderr data')
  console.log(data)
})