我想運行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. Python腳本一直在後臺運行
- 4. 在後臺運行腳本?
- 5. 在後臺運行腳本
- 6. 在後臺運行的Redis-Queue(RQ)worker
- 7. 在後臺運行前臺ksh腳本
- 8. 如何在運行後在後臺啓動python腳本?
- 9. 如何在註銷SSH後在後臺運行Python腳本?
- 10. Python:在後臺運行腳本並執行輸入/輸出
- 11. 在後臺運行Python HTTPServer並繼續執行腳本
- 12. 在後臺運行PHP腳本
- 13. Java:在後臺運行shell腳本
- 14. 如何在後臺運行php腳本?
- 15. 在後臺運行Ruby腳本
- 16. 在後臺自動運行bash腳本
- 17. 在後臺運行一個php腳本
- 18. 在後臺運行php腳本centos server
- 19. PHP - 在後臺運行腳本
- 20. 在nginx的後臺運行php腳本
- 21. PHP在後臺運行腳本
- 22. 如何讓腳本在後臺運行
- 23. bash:腳本不在後臺運行
- 24. 在後臺運行shell腳本
- 25. 在init.d後臺執行python腳本
- 26. 如何強制在Linux上在後臺運行Python腳本
- 27. 從PHP文件在後臺運行Python腳本
- 28. 使用raw_input命令在後臺運行python腳本
- 29. 如何在ubuntu後臺運行python腳本?
- 30. 輸出文件沒有創建在後臺運行python腳本
更新:現在有一個實驗性的python解釋器在javascript中執行。檢查一下@ http://pypyjs.org。 – mathewguest
我還建議您在瀏覽器開發人員工具中查看HTTP(s)請求(對於許多Web瀏覽器,熱鍵爲F12)。您應該看到1個對test.html頁面的HTTP請求,然後對python服務器發出第二個AJAX請求。在這個請求的迴應中將是這些數字的總和。 – mathewguest