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浏览器上托管相同的内容。
答案 0 :(得分:0)
不完全确定我看到了问题。你的代码有效。
1)确保您访问localhost:9002
2)如果您打算运行瓶代码,请使用
var run = exec('/usr/bin/python', ['/path/to/bottle_server.py']);
至于在Python代码和Node.js代码之间来回通信,那么你需要套接字。要查看的一些库可能包括socket.io
或使用zmq
等消息传递队列。
如果您希望与python API进行单向通信,则需要从Node代码向http://localhost:9002
执行HTTP请求。或者,Node非常具有您自己包含在Python代码中的相同功能。
修改强>
关于以下评论,这是一个更新的脚本。您需要inherit
父级stdout
和stderr
,否则,如上图所示,它认为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}`);
});