如何创build一个节点js函数,始终等待从java system.out.println新行?

我想寻求想法,我怎么可以创build一个函数,总是等待新线由于从我的Java应用程序通过标准输出延迟?

我想以一种方式显示到我的terminal控制台,数据是逐步呈现的,而不是一个整块。

这是我的Java代码:

public class HelloWorld { public static void main(String[] args) { // Prints "Hello, World" to the terminal window. // System.out.println("Hello, Worldzzz"); for (int i=1; i<11; i++) { try { Thread.sleep(500); } catch (Exception e) { } System.out.println("Count is: " + i); } } } 

这是我的节点js代码到目前为止:

 var http = require('http'), util = require('util'), url = require('url'), exec = require('child_process').exec, child, result = '', poort = 8088; http.createServer(function(req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); var pathname = url.parse(req.url).pathname; if (pathname == '/test') { res.write('test:'); child = exec('java HelloWorld', function(error, stdout, stderr) { console.log = function(d) { process.stdout.write(d + stdout + '\n'); }; //console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); if (error !== null) { console.log('exec error: ' + error); } }) res.end(); } else { res.write('operation not allowed'); res.end(); } }).listen(poort); 

而不是使用child_process.exec()您将需要使用child_process.spawn()并侦听事件。

例子

下面是一个简单的例子,它等待Java程序完成并将所有内容打印在一个大块中:

 var exec = require('child_process').exec; var child = exec('java HelloWorld', function (error, stdout, stderr) { if (error) { console.error('Error:', error); } else { process.stdout.write(stdout); } }); 

下面是Java程序打印的节点程序处理每一行的示例:

 var spawn = require('child_process').spawn; var child = spawn('java', ['HelloWorld']); child.on('error', function (err) { console.error('Error:', err); }); child.stdout.on('data', function (data) { process.stdout.write(data.toString()); }); 

请记住, data是一个缓冲区而不是string – 如果你需要一个string,你必须使用data.toString() (这里也可以不使用.toString()因为process.stdout.write()可以将缓冲区作为但为了清楚,我添加了它)。

您可能还需要听取closures事件,以便知道何时完成写入输出:

 var spawn = require('child_process').spawn; var child = spawn('java', ['HelloWorld']); child.on('error', function (err) { console.error('Error:', err); }); child.stdout.on('data', function (data) { process.stdout.write(data.toString()); }); child.on('close', function (code) { console.log('Child exited with code', code); }); 

有关更多详细信息,请参阅spawn的文档 。