web-dev-qa-db-ja.com

node.jsから外部スクリプト/プログラムを呼び出す方法

C++プログラムとnode.js Webアプリに組み込むPythonスクリプトがあります。

私のサイトにアップロードされたファイルを解析するためにそれらを使用したいと思います。処理に数秒かかる場合があるため、アプリもブロックしないようにします。

ファイルを受け入れてから、C++プログラムからサブプロセスでnode.jsコントローラーからスクリプトを実行するだけでよいのでしょうか。

22
alh

child_process を参照してください。 spawnを使用した例を次に示します。これにより、データが出力されるときにstdinに書き込み、stderr/stdoutから読み取ることができます。 stdinに書き込む必要がなく、プロセスの完了時にすべての出力を処理できる場合は、child_process.execは、コマンドを実行するためのわずかに短い構文を提供します。

// with express 3.x
var express = require('express'); 
var app = express();
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(app.router);
app.post('/upload', function(req, res){
   if(req.files.myUpload){
     var python = require('child_process').spawn(
     'python',
     // second argument is array of parameters, e.g.:
     ["/home/me/pythonScript.py"
     , req.files.myUpload.path
     , req.files.myUpload.type]
     );
     var output = "";
     python.stdout.on('data', function(data){ output += data });
     python.on('close', function(code){ 
       if (code !== 0) {  
           return res.send(500, code); 
       }
       return res.send(200, output);
     });
   } else { res.send(500, 'No file found') }
});

require('http').createServer(app).listen(3000, function(){
  console.log('Listening on 3000');
});
37
Plato

古い質問かもしれませんが、これらのリファレンスのいくつかは、NodeJSにpythonを含めるための詳細と異なる方法を提供します。

これを行うには複数の方法があります。

  • 最初の方法は_npm install python-Shell_を実行することです

ここにコードがあります

_var PythonShell = require('python-Shell');
//you can use error handling to see if there are any errors
PythonShell.run('my_script.py', options, function (err, results) { 
//your code
_

pyshell.send('hello');を使用してpython Shellにメッセージを送信できます

ここでAPIリファレンスを見つけることができます- https://github.com/extrabacon/python-Shell

さらにいくつかの参照- https://www.npmjs.com/package/python

サービス指向アーキテクチャを使用する場合- http://ianhinsdale.com/code/2013/12/08/communicating-between-nodejs-and-python/

1
Tejus Prasad