在 Node Express 应用程序中从 python-shell 向浏览器发送消息
Emitting messages from python-shell to a browser in a Node Express App
我有一个快速应用程序,我希望能够通过路由触发 python 脚本并将日志发送到浏览器中。
我创建了一个正确触发 python 脚本并使用 python-shell 模块将日志输出到节点控制台的路由。如何将这个日志实时推送到浏览器。
我在 index.html 页面上有一个按钮,它会触发对下面的 /python 路由的 Ajax post 请求。我曾尝试使用 socket.io 来实现这一点,但还没有设法解决这个问题。 socket.io 是前进的方向吗,请指出正确的方向,或者有人可以推荐替代方案吗?
我的文件布局是:
server.js
var express = require('express');
var path = require('path');
var app = express();
var port = process.env.PORT || 3000;
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);
/* A bit inbetween */
server.listen(port)
app/routes.js
var PythonShell = require('python-shell');
var config = require('../config/config');
module.exports = function(app) {
app.get('/', function(req, res) {
res.render('pages/index.ejs', {
pageTitle: 'Index'
}); // load the index.ejs file
});
app.post('/test', function(req, res) {
var options = {
mode: 'text',
pythonPath: config.pythonPath,
pythonOptions: ['-u'],
scriptPath: config.pythonScriptsDirectory
};
var pyshell = new PythonShell('printRange.py', options);
pyshell.on('message', function (message) {
console.log(message);
});
res.sendStatus(200)
});
}
提前致谢
socket.io 是一个很好的解决方案。这将负责将消息从服务器传递到客户端。您只需 post 将消息发送到服务器端,并让回调在客户端对其作出反应
在服务器端你会有这样的东西:
var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
io.on('connection', function(){
console.log('connected');
});
server.listen(3000);
...
var pyshell = new PythonShell('printRange.py', options);
pyshell.on('message', function (message) {
if (connected)
io.emit('logentry',message);
});
在客户端,你会有这样的东西:
<script src='/socket.io/socket.io.js'></script>
<script>
var socket = io();
socket.on('logentry',function(log_entry){
add_to_html(log_entry); // You need to implement this function.
});
</script>
我有一个快速应用程序,我希望能够通过路由触发 python 脚本并将日志发送到浏览器中。
我创建了一个正确触发 python 脚本并使用 python-shell 模块将日志输出到节点控制台的路由。如何将这个日志实时推送到浏览器。
我在 index.html 页面上有一个按钮,它会触发对下面的 /python 路由的 Ajax post 请求。我曾尝试使用 socket.io 来实现这一点,但还没有设法解决这个问题。 socket.io 是前进的方向吗,请指出正确的方向,或者有人可以推荐替代方案吗?
我的文件布局是:
server.js
var express = require('express');
var path = require('path');
var app = express();
var port = process.env.PORT || 3000;
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);
/* A bit inbetween */
server.listen(port)
app/routes.js
var PythonShell = require('python-shell');
var config = require('../config/config');
module.exports = function(app) {
app.get('/', function(req, res) {
res.render('pages/index.ejs', {
pageTitle: 'Index'
}); // load the index.ejs file
});
app.post('/test', function(req, res) {
var options = {
mode: 'text',
pythonPath: config.pythonPath,
pythonOptions: ['-u'],
scriptPath: config.pythonScriptsDirectory
};
var pyshell = new PythonShell('printRange.py', options);
pyshell.on('message', function (message) {
console.log(message);
});
res.sendStatus(200)
});
}
提前致谢
socket.io 是一个很好的解决方案。这将负责将消息从服务器传递到客户端。您只需 post 将消息发送到服务器端,并让回调在客户端对其作出反应
在服务器端你会有这样的东西:
var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
io.on('connection', function(){
console.log('connected');
});
server.listen(3000);
...
var pyshell = new PythonShell('printRange.py', options);
pyshell.on('message', function (message) {
if (connected)
io.emit('logentry',message);
});
在客户端,你会有这样的东西:
<script src='/socket.io/socket.io.js'></script>
<script>
var socket = io();
socket.on('logentry',function(log_entry){
add_to_html(log_entry); // You need to implement this function.
});
</script>