从JavaScript调用代码Python函数(Call Python function from

2019-06-18 18:34发布

我想调用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)

Answer 1:

所有你需要的是让一个Ajax请求你的Python代码。 你可以使用jQuery做这个http://api.jquery.com/jQuery.ajax/ ,或只使用的JavaScript

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


Answer 2:

document.getElementsByTagName我猜你是运行在浏览器中的JavaScript。

揭露功能,在浏览器的JavaScript运行的传统方法是调用使用AJAX的远程URL。 Ajax中的X是XML,但现在大家使用的,而不是XML JSON。

例如,使用jQuery你可以这样做:

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

你将需要实现服务器端的web服务蟒蛇。 对于简单的web服务我喜欢用瓶 。

一个典型的实现是这样的:

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

你可以在浏览器中运行的IronPython(一种Python.Net的) Silverlight的 ,但我不知道是否NLTK可用于IronPython的。



Answer 3:

通常,您将使用一个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();


Answer 4:

没有Python程序无法运行的.py从JavaScript文件,就像你不能打开.txt文件没有一个文本编辑器。 但是,整个事情变得与Web API服务器的帮助(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. 在您的Web 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); } }); } 

记住,你的.py文件不会将您的用户的计算机上运行,​​而是在服务器上。



文章来源: Call Python function from Javascript code