我想通过HTML按钮运行Python脚本。 我没有使用任何服务器。
我尝试使用本地服务器,但出现此错误:jquery-3.3.1.min.js:2 GET http://127.0.0.1:8080/home/techm/Documents/labelImg-master/labelImg.py 404 (Not Found)
我尝试使用服务器也出现此错误:jquery-3.3.1.min.js:2 Failed to load file:///home/techm/Documents/labelImg-master/labelImg.py: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
这是我的HTML代码:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<input type="button" id='script' name="scriptbutton" value=" Run Script " onclick="goPython()">
<script src="http://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script>
function goPython(){
$.ajax({
url: "/home/techm/Documents/labelImg-master/run.sh",
context: document.body
}).done(function() {
alert('finished python script');;
});
}
</script>
</body>
</html>
还有其他方法可以单击HTML页面中的按钮并自动运行python脚本。
答案 0 :(得分:0)
由于安全性原因,您无法通过javascript函数访问文件系统。
您唯一可以做的就是禁用浏览器的安全性。
如果您使用的是Chrome,请按以下方式启动Chrome:
C:\ Program Files(x86)\ Google \ Chrome \ Application \ chrome.exe“ --disable-web-security --user-data-dir =” C:/ tempFolderForChromeThings
答案 1 :(得分:0)
很遗憾,您要尝试执行的操作将无法实现。要运行位于文件系统上的Python脚本,您必须在终端中运行它,而这不可能通过导航器来完成。
我建议您设置一个快速服务器为您执行此操作。
node.js服务器:
const http = require('http');
const { exec } = require('child_process');
const fs = require('fs');
//create a server object:
http.createServer(function (req, res) {
//if the request url is: localhost:8080
if(req.url === "/"){
fs.readFile("index.html", function(err, data){
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
res.end();
});
//if the request url is: localhost:8080/run
}else if(req.url === "/run"){
exec('./ /home/techm/Documents/labelImg-master/run.sh', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
res.write('Command has failed'); //write a response to the client
res.end(); //end the response
return;
}
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
res.write('Command has been run'); //write a response to the client
res.end(); //end the response
});
}
}).listen(8080); //the server object listens on port 8080
将以上内容放入名为server.js
的文件中后,通过在终端(与该文件位于同一目录)中键入node server.js
来运行服务器
然后您的ajax应该是这样的。
$.ajax({
url: "/run",
context: document.body
}).done(function(data) {
//data should contain what the server responds, in this case "Command has been run"
console.log(data);
});
答案 2 :(得分:0)
如何使用Brython? 这是用于客户端的python解释器。
这是网站。
https://brython.info/index.html
您可以像这样使用它,
<div id="editor">
print(123)
</div>
<button id="btn">Run Python</button>
...
<script type="text/javascript" src="https://cdn.rawgit.com/brython-dev/brython/stable/www/src/brython.js"></script>
<script type="text/javascript" src="https://cdn.rawgit.com/brython-dev/brython/stable/www/src/brython_stdlib.js"></script>
<script type="text/python">
from browser import doc, window
from browser import html
def exec_python():
exec(doc['editor'].value)
doc['btn'].bind('click', exec_python)
</script>
答案 3 :(得分:0)
我发现了一种非常简单的方法,可以从浏览器按钮启动python脚本,但是可以在浏览器外部运行。您不必安装任何其他软件。没有服务器,没有网络权限,没有新的协议注册表,不需要任何东西。
import py_compile py_compile.compile ('myscript.py')
<button type="button" onclick="runOnPython()">RunOnPython</button>
function runOnPython() { window.open("myScript.pyc") }
确保路径信息完整。为了简单起见,此处假定html和python脚本位于同一目录中。如果不同,请提供myScript.pyc文件的完整路径信息。
单击按钮时,将弹出著名的“使用/打开文件”对话框。默认的python exe被列为打开的应用程序。因此,再次单击。在那里。您的Python脚本开始执行。
不幸的是,要消除第二个按钮的点击并不是很容易;因为禁用了“对于此类文件始终执行相同操作”选项。在选项->文件下载首选项中所做的设置也没有任何区别。您必须在浏览器的个人资料文件夹中编辑MimeTypes.rdf文件。我没有尝试过。
以上场景已在Firefox 65.0的Python 3.6.5上进行了测试