javascript - 使用 Node.js 执行 Python 脚本

标签 javascript jquery python ajax node.js

当我单击 HTML 按钮时,我尝试执行 Python 脚本。这两个文件都位于 Node.js 服务器上。当我按下按钮时,我在浏览器控制台中收到此消息:

app.js:5 Uncaught ReferenceError: runPython is not defined

我不知道如何编写 AJAX 脚本来调用 Node Web 服务器文件上的 runPython() 函数。下面是我的代码:

index.html

<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.3/jquery.js">       </script>
</head>
<body>

<button id="myButton">Run Python Script</button>

<script src="app.js"></script>
</body>
</html>

app.js

$('#myButton').click(function() {
    $.ajax({
      url: "",
      success: function(data) {
         runPython();
      },
    });
});

webserver.js (node.js)

'use strict';
const http = require('http');
const url = require('url');
const fs = require('fs');
const path = require('path');

let mimes = {
  '.htm': 'text/html',
  '.css': 'text/css',
  '.js': 'text/javascript'
}

//Have ajax call it to execute Python Script
function runPython(){
    let exec = require('child_process').exec;
    exec('python myscript.py', (error, stdout, stderr) => {
        console.log(stdout);
    });
}

function fileAccess(filepath) {
  return new Promise((resolve, reject) => {
    fs.access(filepath, fs.F_OK, error => {
      if(!error) {
        resolve(filepath);
      } else {
        reject(error);
      }
    });
  });
}

function streamFile(filepath) {
    return new Promise((resolve, reject) => {
        let fileStream = fs.createReadStream(filepath);

        fileStream.on('open', () => {
            resolve(fileStream);
        });

        fileStream.on('error', error => {
            reject(error);
        });
      });
}

function webserver(req, res) {
  // if the route requested is '/', then load 'index.htm' or else
  // load the requested file(s)

  let baseURI = url.parse(req.url);
  let filepath = __dirname + (baseURI.pathname === '/' ? '/index.htm' :  baseURI.pathname);
  let contentType = mimes[path.extname(filepath)];

  fileAccess(filepath)
    .then(streamFile)
    .then(fileStream => {
      res.writeHead(200, {'Content-type': contentType});
      //res.end(content, 'utf-8');
      fileStream.pipe(res);
    })
    .catch(error => {
      res.writeHead(404);
      res.end(JSON.stringify(error));
    });


}

http.createServer(webserver).listen(3000, () => {
  console.log('Webserver running on port 3000');
});

我应该如何编写AJAX代码才能运行webserver.js中的函数?

最佳答案

浏览器正在加载该 URL 处的脚本。这被视为数据或文本。浏览器通常不运行 Python,因此按预期工作。

关于javascript - 使用 Node.js 执行 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37330999/

相关文章:

python - 生成新的 csv 文件并按升序排列数据?

混合了文字和数组的 Javascript 数组

javascript - 向我的 Flickity 轮播版本添加 "blinds"过渡

javascript - 动态生成HTML5中音频的时间和小数点格式

javascript - ajax 成功回调不按预期顺序执行

jQuery UI,元素子元素的语法

javascript - 获取 Uploadify 错误 : uploadifySettings Not A Function

javascript - jQuery 按值选择单选?

python - 创建插入 mysql 脚本

python - openerp刷新页面时Treeview不包含记录?