Как запустить скрипт Python через кнопку HTML? - PullRequest
0 голосов
/ 04 сентября 2018

Я хотел запустить скрипт Python через кнопку HTML. Я не использую какой-либо сервер.

Я пытался использовать локальный сервер, но он выдает эту ошибку: 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 голосов
/ 09 февраля 2019

Я обнаружил очень простой способ запуска скрипта Python из кнопки браузера, но работающий вне браузера. Вам не нужно устанавливать дополнительное программное обеспечение. Нет сервера, нет сетевых разрешений, нет нового реестра протоколов, ничего не нужно.

  1. Скомпилируйте ваш скрипт на Python, чтобы получить файл .pyc. На оболочке Python:
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 начинает выполняться.

К сожалению, не так просто устранить второе нажатие кнопки; потому что опция «всегда делать то же самое для этого типа файла» отключена. Ваша настройка, сделанная в Options -> File Download Preferences, также не имеет значения. Вы должны отредактировать файл MimeTypes.rdf в папке с профилями браузера; что я не пробовал.

Вышеописанный сценарий тестируется на Python 3.6.5 с Firefox 65.0

0 голосов
/ 04 сентября 2018

К сожалению, то, что вы пытаетесь сделать, будет невозможно. Чтобы запустить скрипт 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({
  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);
});
0 голосов
/ 04 сентября 2018

Как насчет использования 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>
0 голосов
/ 04 сентября 2018

Вы не можете получить доступ к вашей файловой системе через функции javascript из-за безопасности.

Единственное, что вы можете сделать, это отключить безопасность вашего браузера.

Если вы используете Chrome, запустите Chrome следующим образом:

C: \ Program Files (x86) \ Google \ Chrome \ Application \ chrome.exe "--disable-web-security --user-data-dir =" C: / tempFolderForChromeThings

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...