NodeJS Fork - 每次子进程发送换行符时做出反应
NodeJS Fork - React each time a newline is sent by subprocess
我正在尝试用 NodeJS 编写一个函数(在 Windows7 上,如果有区别的话)它将监听子进程,并且在通过子进程发送每个换行符之后,在 Node.js 中处理它。看看这个例子:
var express = require('express');
var app = express();
app.listen(3000);
app.get('/', function(request, response) {
var exec = require('child_process').exec,
child, out = "NA";
child = exec('java -jar misc.jar',
function (error, stdout, stderr) {
if(stdout!==''){
out = '---------stdout: ---------\n' + stdout;
}
if(stderr!==''){
out = '---------stderr: ---------\n' + stderr;
}
if (error !== null) {
out = '---------exec error: ---------\n[' + error+']';
}
response.send(out);
});
});
如您所想,function (error, stdout, stderr)
仅在我的子进程终止后才被调用。
相反,我希望每当从 stdout、stderr 输出新的文本行时调用该函数。那时,我想使用 AJAX/Socket.IO 动态更新面向用户的 html 页面。 (如果你也能帮助我指出那个方向,绝对加分!)
好吧,我意识到我需要使用 "spawn" 而不是 "exec" 来做到这一点:
var express = require('express');
var app = express();
app.listen(3000);
app.get('/', function(request, response) {
response.send("Hey");
var spawn = require('child_process').spawn;
var java = spawn('java', ['-jar', 'misc.jar']);
java.stdout.on('data', function(data) {
console.log(data);
});
});
但是,我注意到使用 "response" 表达不允许我推送数据。所以,我需要弄清楚我的问题的最后一部分,因为我认为要做到这一点我需要使用 AJAX/Socket.IO
我正在尝试用 NodeJS 编写一个函数(在 Windows7 上,如果有区别的话)它将监听子进程,并且在通过子进程发送每个换行符之后,在 Node.js 中处理它。看看这个例子:
var express = require('express');
var app = express();
app.listen(3000);
app.get('/', function(request, response) {
var exec = require('child_process').exec,
child, out = "NA";
child = exec('java -jar misc.jar',
function (error, stdout, stderr) {
if(stdout!==''){
out = '---------stdout: ---------\n' + stdout;
}
if(stderr!==''){
out = '---------stderr: ---------\n' + stderr;
}
if (error !== null) {
out = '---------exec error: ---------\n[' + error+']';
}
response.send(out);
});
});
如您所想,function (error, stdout, stderr)
仅在我的子进程终止后才被调用。
相反,我希望每当从 stdout、stderr 输出新的文本行时调用该函数。那时,我想使用 AJAX/Socket.IO 动态更新面向用户的 html 页面。 (如果你也能帮助我指出那个方向,绝对加分!)
好吧,我意识到我需要使用 "spawn" 而不是 "exec" 来做到这一点:
var express = require('express');
var app = express();
app.listen(3000);
app.get('/', function(request, response) {
response.send("Hey");
var spawn = require('child_process').spawn;
var java = spawn('java', ['-jar', 'misc.jar']);
java.stdout.on('data', function(data) {
console.log(data);
});
});
但是,我注意到使用 "response" 表达不允许我推送数据。所以,我需要弄清楚我的问题的最后一部分,因为我认为要做到这一点我需要使用 AJAX/Socket.IO