客户端调用服务器运行python



我是个初学者,几天来一直在寻找答案。。我正在使用nodejs构建一个网络应用程序。

这是app.jsI节点来启动(我的服务器端(

http = require("http"),
path = require("path"),
url = require("url"),
fs = require("fs");

function sendError(errCode, errString, response)
{
response.writeHead(errCode, {"Content-Type": "text/plain"});
response.write(errString + "n");
response.end();
return;
}
function sendFile(err, file, response)
{
if(err) return sendError(500, err, response);
response.writeHead(200);
response.write(file, "binary");
response.end();
}
function getFile(exists, response, localpath)
{
if(!exists) return sendError(404, '404 Not Found', response);
fs.readFile(localpath, "binary",
function(err, file){ sendFile(err, file, response);});
}
function getFilename(request, response)
{
var urlpath = url.parse(request.url).pathname; // following domain or IP and port
var localpath = path.join(process.cwd(), urlpath); // if we are at root
fs.exists(localpath, function(result) { getFile(result, response, localpath)});
}
var server = http.createServer(getFilename);
server.listen(1000);
console.log("Server available..."); 

因此,我可以使用localhost:1000/index.html访问我的应用程序

我的index.html(客户端(是一个html页面,包含我想用来启动python脚本的按钮。

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<title>Lights</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
</head>
<body class="text-white bg-dark">

<center>
<input type="submit" value="OFF" name="OFF" onclick="turnOff()">
<input type="submit" value="ON" name="ON" onclick="turnOn()">
</center>

<div id="texttest"> </div>
<div id="fil"> </div>

<script src="funcs.js"></script>

</body>
</html>

从那里你可以看到我使用脚本来运行;onclick(("这个脚本正在调用python运行。。但显然我不能这么做,因为我正在尝试运行python客户端错误";要求没有定义">

my函数.js

const { exec } = require('child_process');
function turnOff() {
console.log("enter Off");
exec('python3 turnOff.py', (err, stdout, stderr) => {
if (err) {
document.getElementById("fil").innerHTML = "error..."+err;
} else {
document.getElementById("fil").innerHTML = "running python...";
}
});
document.getElementById("texttest").innerHTML = "trying off sucess  :<br>      " ;
}   

function turnOn() {     
console.log("enter On");
exec('python3 turnOn.py', (err, stdout, stderr) => {
if (err) {
document.getElementById("fil").innerHTML = "error..."+err;
} else {
document.getElementById("fil").innerHTML = "running python...";
}
});
document.getElementById("texttest").innerHTML = "trying on sucess  :<br>      " ;
}

我应该使用AJAX请求,但我似乎找不到如何使用它在服务器端运行python。因为AJAX请求是从nodejs内的html发送的。。

我能做什么?

感谢您的帮助

您的错误是对的

require仅在服务器端定义。funcs.js是在客户端执行的,所以不能使用require。

为了达到你的目标,你需要进行AJAX调用。

// server.js
const { exec } = require('child_process');
const http = require('http');
const server = http.createServer((req, res) => {
/* When a request will call the http://localhost:5000/run url
it will execute this code block */
if (req.url === '/run') {
exec('python ...', () => {
// ...
res.write('Python script executed');
res.end();
});
}
});
server.listen(5000);
// funcs.js
function turnOff() {
console.log("enter Off");
// Turn off will send a request on the http://localhost:5000/run endpoint
fetch("/run", {
method: "POST"
})
.then(() => {
document.getElementById("fil").innerHTML = "running python...";
})
.catch(() => {
document.getElementById("fil").innerHTML = "error..."+err;
})
}   

最新更新