2013-08-29 309 views
2

關於如何從客戶端執行Python腳本,有很多答案。我有興趣查明是否可以從服務器端執行腳本並檢查執行是否成功完成。假設我正在使用兩側使用JavaScript的Meteor堆棧,並且需要從後端觸發一堆Python腳本任務。如何從服務器端執行Python腳本Javascript

回答

0

流星在NodeJS容器內運行。因此,您應該可以使用像execSync這樣的包來爲您完成此任務。

+1

「警告爲開發機shell腳本只有不要使用生產服務器。「 - 這個評論在他們的README文件中稍微令人擔憂。 – pilot

3

如果您需要python腳本項目,最常見的方法是通過消息隊列連接python和meteor。例如,流星發生的行爲應該觸發一些python腳本。你發送消息到python隊列。 Python偵聽隊列以及何時獲取消息啓動任務。任務完成後,python應該發送消息到隊列中,也許還有任務或其他結果。

//Meteor server side 
var amqp = Meteor.require('amqp'); 
var connection = amqp.createConnection(amqpCredentials); 
var Fiber = Npm.require("fibers"); 

connection.on('ready', function(){ 
    connection.queue(queueName, {autoDelete: false}, function(queue){ 

     console.log(' [*] Waiting for messages. To exit press CTRL+C') 

     queue.subscribe(function(msg){ 
      console.log(" [x] Received %s", msg.data.toString('utf-8')); 
      var msg = EJSON.parse(msg.data); 
      if(msg.type === 'news'){ 
      Fiber(function(){News.insert(msg.data).run()}); 
      } 
     }); 
    }); 

});

在Python的一邊,你應該運行任務並添加隊列的偵聽器。 你可以閱讀有關的RabbitMQ和Python客戶端在官方文檔RabbitMQ tutor

+0

你能提供一個簡單的例子或指向一個好的資源嗎? – pilot

2

你可以做到這一點簡單地用命令行invokation,以同樣的方式在任何節點應用:

var exec = Npm.require('child_process').exec; 
var Fiber = Npm.require('fibers'); 


new Fiber(function(){ 
    exec("python command", function (error, stdout, stderr) { 
    ... 
    }); 
}).run(); 
+0

雖然不需要在Fiber/Future中運行嗎? –

+0

好點。通常,它需要。我已更新答案代碼。 –

+0

這個幫了我 – torayeff