2015-12-30 16 views
5

Tôi chỉ muốn gọi một exe bên ngoài từ một nodejs-App. Exe bên ngoài này làm cho một số phép tính và trả về một kết quả đầu ra mà nhu cầu nodejs-App cần. Nhưng tôi không có ý tưởng làm thế nào để làm cho các kết nối giữa nodejs và một exe bên ngoài. Vì vậy, câu hỏi của tôi:node.js gọi exe bên ngoài và đợi đầu ra

  1. Làm cách nào để gọi một tệp exe bên ngoài với các đối số cụ thể từ bên trong nút đúng cách?
  2. Và làm thế nào để tôi phải truyền đầu ra của exe sang nodej một cách hiệu quả?

Nodejs sẽ đợi đầu ra của exe bên ngoài. Nhưng nodejs biết khi nào exe đã hoàn thành quá trình xử lý của nó? Và sau đó làm thế nào để tôi phải cung cấp kết quả của exe? Tôi không muốn tạo ra một tập tin văn bản tạm thời, nơi tôi viết đầu ra và nodejs chỉ cần đọc tập tin văn bản này. Có cách nào tôi có thể trực tiếp trả lại đầu ra của exe để nodejs? Tôi không biết làm thế nào một exe bên ngoài có thể trực tiếp cung cấp đầu ra của nó để nodejs. BTW: Các exe là chương trình của riêng tôi. Vì vậy, tôi có toàn quyền truy cập vào ứng dụng đó và có thể thực hiện bất kỳ thay đổi cần thiết nào. Mọi trợ giúp đều được chào đón ...

+0

séc ra ví dụ này sử dụng các module tiến trình con: https://gist.github.com/Sidnicious/1215700 – Quy

Trả lời

8
  1. Với mô-đun child_process.
  2. Với thiết bị xuất chuẩn.

Mã sẽ trông như thế này

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); 
}); 
+0

cảm ơn, ví dụ dễ dàng tôi có thể sử dụng làm cơ sở cho dự án của mình. Và nó hoạt động! – Sheldon

0

Bạn muốn sử dụng child_process, bạn có thể sử dụng exec hoặc đẻ trứng, tùy thuộc vào nhu cầu của bạn. Exec sẽ trả về một bộ đệm (nó không phải là live), spawn sẽ trả về một luồng (nó đang hoạt động). Ngoài ra còn có một số quirks thường xuyên giữa hai, đó là lý do tại sao tôi làm điều buồn cười tôi làm để bắt đầu npm.

Dưới đây là một ví dụ sửa đổi từ một tool I wrote rằng đã cố gắng để chạy NPM cài đặt cho bạn:

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 
}); 
Các vấn đề liên quan