Я пытаюсь выполнить скрипт Python, когда я нажимаю кнопку HTML. Оба файла находятся на сервере Node.js. Когда я нажимаю кнопку, я получаю это сообщение в консоли браузера:Выполнять скрипт Python с Node.js
app.js:5 Uncaught ReferenceError: runPython is not defined
Я не знаю, как написать мой скрипт AJAX для вызова функции 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?
Должен быть способ запуска скрипта Python при нажатии кнопки. Что мне нужно изменить в моем коде для запуска скрипта? – user3062459
@ user3062459 Возможно, он может работать на стороне сервера, если все настроено правильно. Вам нужно будет настроить обработчик, который выполнит выполнение питона при запросе правильного URL-адреса. https://nodejs.org/api/child_process.html. Более сложным способом было бы установить и использовать что-то вроде: https://github.com/extrabacon/python-shell, который немного отличается по стилю. – dlamblin