ブラウザでいくつかの方程式を解くためにPythonコードを実行したいと思います。私は現在、Webワーカーのjavascriptでこれを行います。これはまったくDOMとやりとりしません。ちょうど入力を受け取り、いくつかの計算を行い、出力を返します。私は同じようにPythonを使うことができるのが大好きです。これは可能ですか?バックグラウンドまたはWebワーカーでPythonスクリプトを実行
答えて
クライアントのブラウザにPythonコードを実行させることはできません。あなたは、Pythonで前後にやりとりするための何らかのプロトコルを見つけなければなりません。これを行う一般的な方法は、HTTPサーバーとして動作するPythonプロセスをどこかで実行させることです。クライアントのブラウザがPythonサーバーへのAPI呼び出し(何らかの形式のHTTP要求)を行い、実行している別のPythonコードがその呼び出しを捕捉してデータを返すようにすることができます。これは、<フレーム>タグまたは要求を行い、ブラウザで応答を解釈するJavaScriptコードと同じくらい単純なものです。
これを試して、新しいディレクトリに移動して2つのファイルを作成してください。 (のpython3上に構築された)
server.py:
#!/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
ながら実行している、また、html(またpython3)を提供するWebサーバーを開始:
$ python -m http.server 8000
その後、20の数字の合計を含むHTTPレスポンスを返信する)http://localhost:8000/test.htmlにブラウザをナビゲートしてみてください、あなたは(PythonのメソッドのMyHandler.do_GETを呼び出しますhttp://localhost:8001/7/13への要求を行うtest.htmlという表示されるはずですクレジットは私が基本的にコピーしたこのウェブサイトに行く:https://daanlenaerts.com/blog/2015/06/03/create-a-simple-http-server-with-python-3/。
これは入手したものと同じくらい簡単ですが、それは1つまたは2つの機能には効果的ですが、多くの機能をPythonにエクスポートすると、より高度なライブラリとフレームワークにアップグレードする価値がありますクライアント/ Javascript側とサーバ/ Python側)には、このタイプのことを実行するためのより堅牢で機能が充実しています。
- 1. バックグラウンドでPythonスクリプトを実行
- 2. バックグラウンドでPythonスクリプトを実行
- 3. バックグラウンドでGearmanワーカーを実行中
- 4. バックグラウンドで実行可能なpythonスクリプトを実行するには
- 5. バックグラウンドでのPythonスクリプトの実行
- 6. バックグラウンドでbashスクリプトを実行
- 7. バックグラウンドでPythonスクリプトを実行しています - Raspbian
- 8. スクリプトをバックグラウンドで実行しますか?
- 9. WebページでPython 2.7スクリプトを実行
- 10. フロントエンドのWebは、実行するPythonスクリプト
- 11. Pythonスクリプトはバックグラウンドで実行し続ける
- 12. pythonをバックグラウンドで実行
- 13. Linux上でPythonスクリプトをバックグラウンドで実行する方法
- 14. は、djangoのWebページでPythonスクリプトを実行します
- 15. セッションアクセスでバックグラウンドでphpスクリプトを実行
- 16. PythonスクリプトをUNIXのバックグラウンドで実行する
- 17. WebからPythonスクリプトを実行
- 18. スクリプトをバックグラウンドで実行する方法
- 19. バックグラウンドでPHPスクリプトを実行する
- 20. バックグラウンドでRubyスクリプトを実行する
- 21. バックグラウンドでのPHPスクリプトの実行
- 22. Webサーバーでpythonスクリプトを実行するには?
- 23. Python 2.7でバックグラウンドでGamを実行
- 24. シェルでバックグラウンドでPHPスクリプトを実行する - スクリプトはmac os xで実行されませんx
- 25. python-paramiko - バックグラウンドでコマンドを実行
- 26. 毎時バックグラウンドでPHPスクリプトを実行できますか?
- 27. PHPで実行されるPythonスクリプトでWebブラウザを開く
- 28. ChromeのWebワーカーからWebワーカーを作成できません
- 29. バックグラウンドでsshコマンドを実行中のスクリプトを実行しています
- 30. Intuneを介してバックグラウンドでPowershellスクリプトを実行します。
更新:javascriptで実行される実験的なPythonインタプリタがあります。それを@ http://pypyjs.orgでチェックしてください。 – mathewguest
また、ブラウザの開発者ツール(多くのWebブラウザではホットキーはF12)でHTTPリクエストを監視することをお勧めします。 test.htmlページに対して1つのHTTPリクエストが表示され、次にPythonサーバーに2つ目のAJAXリクエストが表示されます。その要求からの応答では、それらの数値の合計になります。 – mathewguest