実現したいこと
- pythonファイルをローカルサーバで実行したいです
前提
初歩的なところで申し訳ありません。HTML/css/JavaScriptでpdfファイルの閲覧サイト(サイト1)を作成し、自身が入力した番号と閲覧しているページ数をもう一方のサイト(サイト2)に反映させるシステムを開発しています。入力した番号と閲覧しているページ数をサイト2に反映させるサーバーのやり取りはpythonを使用して実装しています。このときのpythonのファイル名を「server.py」とします。このファイルをローカルサーバーを立ち上げて起動したいのですが、どうしてもファイルサーバーになってしまい、pythonファイルが起動しません。下記にpythonのコードを記載しておきます(使用しているモジュールはhttp.server)。この開発はローカル環境でやる想定です。
発生している問題・エラーメッセージ
python -m http.server ポート番号
該当のソースコード
python
1from http.server import HTTPServer,BaseHTTPRequestHandler 2import numbers 3import sys,json,os 4class MyHandler(BaseHTTPRequestHandler): 5 def do_OPTIONS(self): 6 self.send_response(200,"ok") 7 self.send_header('Access-Control-Allow-Origin', '*') 8 self.send_header('Access-Control-Allow-Methods', '*') 9 self.send_header('Access-Control-Allow-Headers', '*') 10 self.end_headers() 11 def do_GET(self): 12 self.send_response(200,"ok") 13 self.send_header('Access-Control-Allow-Origin', '*') 14 self.send_header('Content-type','application/json') 15 self.end_headers() 16 with open('page.json','r') as f: 17 self.wfile.write(f.read().encode()) 18 def do_POST(self): 19 self.send_response(200,"ok") 20 self.send_header('Access-Control-Allow-Origin','*') 21 self.send_header('Content-type','text/html') 22 self.end_headers() 23 self.wfile.write('ok'.encode())#通信成功時にok 24 enc = sys.getfilesystemencoding()#config encoding of system 25 content_len = int(self.headers.get("content-length")) 26 content_json = self.rfile.read(content_len) 27 print(content_json) 28 #print(content_json['number']) 29 received_data = json.loads(content_json) 30 print(received_data) 31 data = 0 32 with open('page.json','rt') as f: 33 data = json.load(f) 34 if(data['students']): 35 for i,student in enumerate(data['students']): 36 print(len(data['students'])) 37 if int(student['number']) == int(received_data['number']): 38 data['students'][i] = received_data 39 break 40 elif int(student['number']) > int(received_data['number']) : 41 data['students'].insert(i,received_data) 42 break 43 elif i==len(data['students'])-1: 44 data['students'].append(received_data) 45 break 46 #To improve performance: bisect.insort_right(received_data,student['students']) 47 else: 48 data['students'].append(received_data) 49 print(data) 50 with open('page.json','wt') as f: 51 json.dump(data,f,ensure_ascii=False,indent=2) 52 53 #data.append(incoming_message.decode(enc)) 54 #f.write(data.decode(enc)) 55 56 57with HTTPServer(('', int(os.environ.get('PORT',80))), MyHandler) as server: 58 with open('page.json','w') as f: 59 f.write('{"students":[]}') 60 server.serve_forever()
試したこと
pythonでローカルサーバーを立ち上げるために、コマンドプロンプトにて「python -m http.server 8500」を実行し、http://localhost:8500にアクセスすると、「Directory listening for~」というサイトが出てきただけで、ここから「server.py」を起動するやり方を調べても分からないという状態です。
補足情報(FW/ツールのバージョンなど)
python3.8.8
server.py には from http.server import HTTPServer,BaseHTTPRequestHandler と書かれていますので、コマンドラインでの http.server モジュールのインポートは不要です。
この場合、server.py を実行すればよいので、
python server.py
とします。なお、
with HTTPServer(('', int(os.environ.get('PORT',80))), MyHandler) as server:
となっていて、80 番ポートを listen しています。質問文によれば 8500 番ポートを使用するとのことですから、8500 にしておかないと、ブラウザでアクセスする際に CONNECTION REFUSED となるでしょう。
with HTTPServer(('', int(os.environ.get('PORT',8500))), MyHandler) as server:
