我想运行python代码来解决浏览器中的一些方程式。我目前在web工作人员用javascript做到这一点。这根本不与DOM进行交互,它只是接收一些输入,进行一些计算,然后返回输出。我希望能够以相同的方式使用python。这可能吗?在后台运行python脚本或web worker
0
A
回答
3
我不认为你能够让客户端的浏览器执行任何Python代码。你必须弄清楚某种协议来与Python进行反复通信。执行此操作的常见方法是让Python进程运行在某个地方,充当HTTP(s)服务器。您可以让客户端的浏览器向Python服务器发出一个API调用(某种形式的HTTP请求),并且单独运行的一段Python代码将捕获该调用并发回数据。这可以像框架>标签或一些Javascript代码一样简单,该代码可以发出请求并解释浏览器中的响应。
试试这个,进入一个新目录并创建两个文件。
server.py(建立在python3):
#!/usr/bin/env python
import http.server
import logging
IP = '127.0.0.1'
PORT = 8001
class MyHandler(http.server.BaseHTTPRequestHandler):
def do_GET(self):
url = self.path
headers = self.headers
print('received request:', url)
numbers = url.split('/')
print('parsed numbers:', numbers)
try:
sumTotal = 0
for num in numbers:
if num == '':
continue
sumTotal += int(num)
self.respond(sumTotal)
except ValueError as ex:
logging.error('unable to parse value: %s' % num)
self.respond(-1)
def respond(self, sumTotal):
# Send response status code
self.send_response(200)
# Send headers
self.send_header('Content-type','text/html')
self.send_header('Access-Control-Allow-Origin', '*')
self.end_headers()
# Send message back to client
message = str(sumTotal)
# Write content as utf-8 data
self.wfile.write(bytes(message, 'utf8'))
return
def main():
address = (IP, PORT)
httpd = http.server.HTTPServer(address, MyHandler)
httpd.serve_forever()
if __name__ == '__main__':
main()
的test.html:
<!DOCTYPE HTML>
<html lang="en-us">
<head>
<title>Python Linking Demo</title>
<script type="text/javascript">
function addNumbers(a, b) {
var url = 'http://localhost:8001/' + a + '/' + b;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
var data = xhr.responseText;
var el = document.getElementById('data-div');
if (!el) {
return;
}
el.innerHTML = data;
}
}
xhr.open('GET', url, true);
xhr.send(null);
};
setTimeout(function(){addNumbers(7, 13);}, 1000);
</script>
</head>
<body>
<h1>With some luck, this will populate below:</h1>
<div id="data-div">{{number}}</div>
</body>
</html>
现在,首先启动的Python进程的服务器:
$ python server.py
虽然即运行,也启动web服务器来提供html(也是python3):
$ python -m http.server 8000
然后尝试导航浏览器http://localhost:8000/test.html,你应该看到的test.html做出http://localhost:8001/7/13一个请求,其将调用的Python方法MyHandler.do_GET(),它发回包含该数字的总和的HTTP响应,20信贷去这个网站,我基本上复制粘贴:https://daanlenaerts.com/blog/2015/06/03/create-a-simple-http-server-with-python-3/。
这是非常简单和原始的,它对于一个或两个函数来说非常适用,但是如果你发现自己将很多功能导出到Python,那么升级到更高级的库和框架(两者都是值得的在客户端/ Javascript端和服务器端/ Python端),它们打算为这种类型的事物提供更强大的功能。
相关问题
- 1. Python脚本一直在后台运行
- 2. 在后台运行Python脚本
- 3. 在后台运行脚本?
- 4. 在后台运行前台ksh脚本
- 5. 如何在注销SSH后在后台运行Python脚本?
- 6. 如何在运行后在后台启动python脚本?
- 7. Python:在后台运行脚本并执行输入/输出
- 8. 如何让脚本在后台运行
- 9. 在后台运行shell脚本
- 10. 在后台运行一个php脚本
- 11. bash:脚本不在后台运行
- 12. 在init.d后台执行python脚本
- 13. 如何强制在Linux上在后台运行Python脚本
- 14. 在linux中运行python脚本作为后台服务
- 15. 从PHP文件在后台运行Python脚本
- 16. 如何在Windows后台运行python脚本?
- 17. 无限地在后台运行Python脚本
- 18. 如何在ubuntu后台运行python脚本?
- 19. 在后台运行python
- 20. 超时问题后台运行PHP脚本的Web
- 21. 在后台运行Cron作业脚本并运行15小时
- 22. Python脚本输出到控制台,即使它在后台运行
- 23. 作为Windows后台进程运行Python脚本
- 24. 运行Python脚本
- 25. 运行python脚本
- 26. 连接到wifi后运行python脚本
- 27. 在相同环境下执行脚本后运行Python控制台
- 28. 重启后运行PHP脚本与Upstart
- 29. Angular 2 Web Worker - UI未运行
- 30. 运行Python脚本并行
更新:现在有一个实验性的python解释器在javascript中执行。检查一下@ http://pypyjs.org。 – mathewguest
我还建议您在浏览器开发人员工具中查看HTTP(s)请求(对于许多Web浏览器,热键为F12)。您应该看到1个对test.html页面的HTTP请求,然后对python服务器发出第二个AJAX请求。在这个请求的回应中将是这些数字的总和。 – mathewguest