2013-08-29 250 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