我想调用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请求你的Python代码。 你可以使用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运行的传统方法是调用使用AJAX的远程URL。 Ajax中的X是XML,但现在大家使用的,而不是XML JSON。
例如,使用jQuery你可以这样做:
$.getJSON('http://example.com/your/webservice?param1=x¶m2=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的。
通常,您将使用一个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();
没有Python程序无法运行的.py从JavaScript文件,就像你不能打开.txt文件没有一个文本编辑器。 但是,整个事情变得与Web API服务器的帮助(IIS在下面的例子)呼吸。
安装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()
在您的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(); }
现在为你的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文件不会将您的用户的计算机上运行,而是在服务器上。