1

我遇到了“child_process”模块和可执行程序的问题。我想将标准输出从可执行文件传输到我的节点进程。

我可以毫无问题地使用“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);
});
4

1 回答 1

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)
})
于 2013-04-19T14:27:09.453 回答