簡體   English   中英

如何從服務器端Javascript執行Python腳本

[英]How to execute a Python script from server side Javascript

關於如何從客戶端執行Python腳本,有許多答案。 我有興趣了解是否可以從服務器端執行腳本,並檢查執行是否成功完成。 假設我正在使用Meteor堆棧,該堆棧在兩側均使用JavaScript,並且有大量Python腳本任務需要從后端觸發。

如果您在項目中需要python腳本,則最常見的方法是通過消息隊列連接python和流星。 例如在流星上發生的動作應該觸發一些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教程中閱讀有關RabbitMq和python客戶端的信息。

您可以使用命令行調用簡單地完成此操作,就像在任何Node應用程序中一樣:

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


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

流星在NodeJS容器中運行。 因此,您應該能夠使用execSync之類的包為您完成此任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM