2

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

4

3 回答 3

3

如果您在项目中需要 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 客户端的信息

于 2013-08-29T12:25:21.473 回答
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();
于 2013-08-29T12:39:23.770 回答
0

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

于 2013-08-29T11:27:47.590 回答