我只想从nodejs-App调用外部exe。这个外部exe进行一些计算并返回nodejs-App所需的输出。但我不知道如何在nodejs和外部exe之间建立连接。所以我的问题:
Nodejs应该等待外部exe的输出。但是nodejs如何知道exe何时完成处理?然后我如何提供exe的结果?我不想创建一个临时文本文件,我将输出写入,而nodejs只是读取此文本文件。有什么办法可以直接将exe的输出返回给nodejs吗?我不知道外部exe如何直接将其输出传递给nodejs。 BTW:exe是我自己的程序。因此,我可以完全访问该应用程序,并可以进行任何必要的更改。欢迎任何帮助...
答案 0 :(得分:12)
child_process
模块。代码看起来像这样
var exec = require('child_process').exec;
var result = '';
var child = exec('ping google.com');
child.stdout.on('data', function(data) {
result += data;
});
child.on('close', function() {
console.log('done');
console.log(result);
});
答案 1 :(得分:2)
您想使用child_process,您可以根据需要使用exec或spawn。 Exec将返回一个缓冲区(它不活动),spawn将返回一个流(它是实时的)。两者之间也有一些偶然的怪癖,这就是为什么我做的有趣的事情,我开始下午。
以下是试图为您运行npm install的tool I wrote的修改示例:
var spawn = require('child_process').spawn;
var isWin = /^win/.test(process.platform);
var child = spawn(isWin ? 'cmd' : 'sh', [isWin?'/c':'-c', 'npm', 'install']);
child.stdout.pipe(process.stdout); // I'm logging the output to stdout, but you can pipe it into a text file or an in-memory variable
child.stderr.pipe(process.stderr);
child.on('error', function(err) {
logger.error('run-install', err);
process.exit(1); //Or whatever you do on error, such as calling your callback or resolving a promise with an error
});
child.on('exit', function(code) {
if(code != 0) return throw new Error('npm install failed, see npm-debug.log for more details')
process.exit(0); //Or whatever you do on completion, such as calling your callback or resolving a promise with the data
});