如何通过HTML按钮运行Python脚本?

时间:2018-09-04 09:33:34

标签: javascript python html html5

我想通过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脚本。

4 个答案:

答案 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脚本,但是可以在浏览器外部运行。您不必安装任何其他软件。没有服务器,没有网络权限,没有新的协议注册表,不需要任何东西。

  1. 编译您的python脚本以获取.pyc文件。在python shell上:
import py_compile
py_compile.compile ('myscript.py')
  1. 在html中定义一个按钮:
<button type="button" onclick="runOnPython()">RunOnPython</button>
  1. 定义单击按钮时要执行的简单javascript函数:
function runOnPython() {
    window.open("myScript.pyc")
}

确保路径信息完整。为了简单起见,此处假定html和python脚本位于同一目录中。如果不同,请提供myScript.pyc文件的完整路径信息。

单击按钮时,将弹出著名的“使用/打开文件”对话框。默认的python exe被列为打开的应用程序。因此,再次单击。在那里。您的Python脚本开始执行。

不幸的是,要消除第二个按钮的点击并不是很容易;因为禁用了“对于此类文件始终执行相同操作”选项。在选项->文件下载首选项中所做的设置也没有任何区别。您必须在浏览器的个人资料文件夹中编辑MimeTypes.rdf文件。我没有尝试过。

以上场景已在Firefox 65.0的Python 3.6.5上进行了测试