Вызов функции 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) 

    Все, что вам нужно, – сделать запрос 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); } }); }