Вызов функции Python из кода Javascript

Я хотел бы назвать функцию Python из Javascript кода, потому что в Javascript нет альтернативы для выполнения того, что я хочу. Это возможно? Не могли бы вы отредактировать приведенный ниже фрагмент?

Часть Javascript:

 var tag = document.getElementsByTagName("p")[0]; text = tag.innerHTML; // Here I would like to call the Python interpreter with Python function arrOfStrings = openSomehowPythonInterpreter("~/pythoncode.py", "processParagraph(text)"); ~/pythoncode.py 

содержит функции с использованием передовых библиотек, которые не имеют простого для записи эквивалента в Javascript

 import nltk # is not in Javascript def processParagraph(text): ... nltk calls ... return lst # returns a list of strings (will be converted to `Javascript` array) 

4 Solutions collect form web for “Вызов функции Python из кода Javascript”

Все, что вам нужно, – сделать запрос ajax на ваш pythoncode. Вы можете сделать это с помощью jquery http://api.jquery.com/jQuery.ajax/ или использовать только javascript

 $.ajax({ type: "POST", url: "~/pythoncode.py", data: { param: text} }).done(function( o ) { // do something }); 

Из document.getElementsByTagName я предполагаю, что вы запускаете javascript в браузере.

Традиционный способ раскрытия функциональности javascript, запущенного в браузере, вызывает удаленный URL-адрес с использованием AJAX. X в AJAX для XML, но в настоящее время каждый использует JSON вместо XML.

Например, используя jQuery, вы можете сделать что-то вроде:

 $.getJSON('http://example.com/your/webservice?param1=x&param2=y', function(data, textStatus, jqXHR) { alert(data); } ) 

Вам нужно будет реализовать веб-сервис python на стороне сервера. Для простых веб-сервисов мне нравится использовать Flask .

Типичная реализация выглядит так:

 @app.route("/your/webservice") def my_webservice(): return jsonify(result=some_function(**request.args)) 

Вы можете запустить IronPython (вид Python.Net) в браузере с помощью silverlight , но я не знаю, доступен ли NLTK для IronPython.

Обычно вы должны выполнить это, используя запрос ajax, который будет выглядеть примерно так, как показано ниже.

 var xhr = new XMLHttpRequest(); xhr.open("GET", "pythoncode.py?text=" + text, true); xhr.responseType = "JSON"; xhr.onload = function(e) { var arrOfStrings = JSON.parse(xhr.response); } xhr.send(); 

Вы не можете запускать .py файлы из JavaScript без python.exe, как вы не можете запускать .txt файлы без notepad.exe. Но все это становится дыханием с помощью Web API Server (IIS в примере ниже).

  1. Установите python и создайте образец файла test.py

     import sys # print sys.argv[0] prints test.py # print sys.argv[1] prints your_var_1 def hello(): print "Hi" + " " + sys.argv[1] if __name__ == "__main__": hello() 
  2. Создание метода на сервере веб-API

     [HttpGet] public string SayHi(string id) { string fileName = HostingEnvironment.MapPath("~/Pyphon") + "\\" + "test.py"; Process p = new Process(); p.StartInfo = new ProcessStartInfo(@"C:\Python27\python.exe", fileName + " " + id) { RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true }; p.Start(); return p.StandardOutput.ReadToEnd(); } 
  3. И теперь для вашего JavaScript:

     function processSayingHi() { var your_param = 'abc'; $.ajax({ url: '/api/your_controller_name/SayHi/' + your_param, type: 'GET', success: function (response) { console.log(response); }, error: function (error) { console.log(error); } }); } 
  • Как я могу визуализировать JavaScript HTML в HTML в python?
  • Как получить доступ к динамически добавленному iframe с помощью Selenium WebDriver?
  • фляжка не может читать статический путь и загружать файлы Javascript
  • Экспорт холста HTML в виде последовательности изображений
  • Может ли веб-драйвер Selenium иметь доступ к глобальным переменным javascript?
  • Применение параметров tinyMCE для динамически созданного текстового поля
  • Самый короткий путь между двумя узлами Trie
  • Поддерживает ли JavaScript поддержку массивов / списков, таких как Python?
  • Python - лучший язык программирования в мире.