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

如何从服务器端Javascript执行Python脚本,javascript,python,meteor,Javascript,Python,Meteor,关于如何从客户端执行Python脚本,有很多答案。我感兴趣的是找出是否可以从服务器端执行脚本,并检查执行是否成功完成。比方说,我使用的堆栈两边都使用JavaScript,有一堆Python脚本任务需要从后端触发。Meteor在NodeJS容器中运行。因此,您应该能够使用类似的软件包为您完成此任务。如果您在项目中需要python脚本,最常见的方法是通过消息队列连接python和meteor。例如,meteor上发生的动作应该会触发一些python脚本。您将消息发送到python的队列。Python

关于如何从客户端执行Python脚本,有很多答案。我感兴趣的是找出是否可以从服务器端执行脚本,并检查执行是否成功完成。比方说,我使用的堆栈两边都使用JavaScript,有一堆Python脚本任务需要从后端触发。

Meteor在NodeJS容器中运行。因此,您应该能够使用类似的软件包为您完成此任务。

如果您在项目中需要python脚本,最常见的方法是通过消息队列连接python和meteor。例如,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客户端的信息

您只需调用命令行即可,与在任何节点应用程序中一样:

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


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

这不需要在光纤/未来中运行吗?这一点很好。通常,它需要。我已经更新了答案代码。“警告仅适用于dev machine shell脚本。不要用于生产服务器。”-他们自述文件中的这条评论有点令人担忧。你能提供一个简单的示例或指向一个好的资源吗?