节点如何使用pug和express节点网站单击按钮时运行python脚本

时间:2018-02-09 13:30:22

标签: javascript python node.js pug pugjs

我试图使用我在pug中创建的网页运行python脚本,在节点中表达。我比python更熟悉python而不是node。使用下面如何运行python脚本?我有python shell包含但不确定当我单击哈巴狗网页上的按钮时如何运行python脚本。

server.js

bash

index.pug

// require all dependencies
var express = require('express');
var app = express();
var PythonShell = require('python-shell');


// set up the template engine
app.set('views', './views');
app.set('view engine', 'pug');

var options = {
  mode: 'text',
  pythonOptions: ['-u'],
  scriptPath: '../hello.py',
  args: ['value1', 'value2', 'value3']
};



// GET response for '/'
app.get('/', function (req, res) {

    // render the 'index' template, and pass in a few variables
    res.render('index', { title: 'Hey', message: 'Hello' });

PythonShell.run('hello.py', options, function (err, results) {
    if (err) throw err;
    // results is an array consisting of messages collected during execution
    console.log('results: %j', results);
});

});

// start up the server
app.listen(3000, function () {
    console.log('Listening on http://localhost:3000');
});

2 个答案:

答案 0 :(得分:3)

创建另一个单击按钮时要调用的路径。我们打电话是PHP: c4888731de466cefaa5c831b54132d3d9384310eb1be36f77f3f6542266cb307 NodeJS: c4888731de466cefaa5c831b54132d3d9384310eb1be36f77f3f6542266cb307 。现在设置此路由的处理程序:

/foo

现在在前端使用哈巴狗创建按钮。在您的客户端javascript中,单击此按钮时,向const { spawn } = require('child_process') app.get('/foo', function(req, res) { // Call your python script here. // I prefer using spawn from the child process module instead of the Python shell const scriptPath = 'hello.py' const process = spawn('python', [scriptPath, arg1, arg2]) process.stdout.on('data', (myData) => { // Do whatever you want with the returned data. // ... res.send("Done!") }) process.stderr.on('data', (myErr) => { // If anything gets written to stderr, it'll be in the myErr variable }) }) 发出AJAX调用。例如,

/foo

在你的客户端JS:

button(type="button", onclick="makeCallToFoo()") Run python script

编辑:您也可以使用类似方式使用的shell模块。如果您不想要客户端JS,则可以将该按钮括在具有属性function makeCallToFoo() { fetch('/foo').then(function(response) { // Use the response sent here }) } 的表单中。例如,

method="get" action="/foo"

答案 1 :(得分:-1)

让我们看看。通常我为了交互python / nodejs我使用djangorestframework,它使用服务器方法GET,POST等。所以首先你必须在python中使用脚本运行服务器。然后在节点中,您可以使用jquery或js框架来监听节点应用程序中的事件。单击该按钮时,会向python发送get / post请求。在python中,你也可以使用javascript为脚本进行条件渲染,如:request == POST:// run script。由于脚本是从节点运行的,因此当单击按钮时,您必须通过节点中的http触发事件。只是一个想法。