我需要通过python托管节点js

时间:2016-10-06 14:16:21

标签: python node.js client-server

var util = require('util'); 
var exec = require('child_process').spawn; 
var run = exec('/usr/bin/python', ['-m', 'SimpleHTTPServer', '9002']); 
run.stdout.on('data', function(data){ 
    console.log('stdout: ' + data.toString()); 
    }); 
run.stderr.on('data', function (data) { 
    console.log('stderr: ' + data.toString()); 
    }); 

test.py

from bottle import route, run, template

@route('/hello/<name>')
def index(name):
    return template('<b>Hello {{name}}</b>!', name=name)

run(host='localhost', port=9002)

我是节点js和python的新手,我想用nodehost在节点js和python之间进行通信。一个简单的python脚本,带有localhost url,用于在运行节点js scrpit之后命中节点js url,在节点中调用python脚本并在Web浏览器上托管相同的内容。

1 个答案:

答案 0 :(得分:0)

不完全确定我看到了问题。你的代码有效。

1)确保您访问localhost:9002
2)如果您打算运行瓶代码,请使用

var run = exec('/usr/bin/python', ['/path/to/bottle_server.py']);

img1

至于在Python代码和Node.js代码之间来回通信,那么你需要套接字。要查看的一些库可能包括socket.io或使用zmq等消息传递队列。

如果您希望与python API进行单向通信,则需要从Node代码向http://localhost:9002执行HTTP请求。或者,Node非常具有您自己包含在Python代码中的相同功能。

修改

关于以下评论,这是一个更新的脚本。您需要inherit父级stdoutstderr,否则,如上图所示,它认为python正在打印到stderr

var util = require('util');
const spawn = require('child_process').spawn;

var run = spawn('/usr/bin/python', ['-m', 'SimpleHTTPServer', '9002'],
    { stdio: ['ignore', 'inherit', 'inherit' ] });

run.on('exit', (code) => {
  console.log(`Child exited with code ${code}`);
});

img2