如何从服务器端Javascript执行Python脚本

时间:2013-08-29 10:41:52

标签: javascript python meteor

关于如何从客户端执行Python脚本,有许多答案。我有兴趣了解是否可以从服务器端执行脚本并检查执行是否已成功完成。假设我使用的是Meteor堆栈,它在两端使用JavaScript,并且需要从后端触发一堆Python脚本任务。

3 个答案:

答案 0 :(得分: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 tutor

上阅读有关RabbitMq和python客户端的信息

答案 1 :(得分:2)

您只需使用命令行调用即可,与任何Node应用程序相同:

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


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

答案 2 :(得分:0)

Meteor在NodeJS容器中运行。因此,您应该能够使用像execSync这样的包来为您完成此任务。