我遇到'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);
});
答案 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)
})