この度、私はネットで見つけたコードを参考にして以下のコードを実行しました。
callBackWebServer.py
1#これはモジュールです。 2#!/usr/bin/env python 3 4import requests 5from BaseHTTPServer import HTTPServer 6from BaseHTTPServer import BaseHTTPRequestHandler 7import urlparse 8 9def start(port, callback): 10 def handler(*args): 11 CallbackServer(callback, *args) 12 server = HTTPServer(('', int(port)), handler) 13 server.serve_forever() 14 15 16class CallbackServer(BaseHTTPRequestHandler): 17 def __init__(self, callback, *args): 18 self.callback = callback 19 BaseHTTPRequestHandler.__init__(self, *args) 20 21 def do_GET(self): 22 parsed_path = urlparse.urlparse(self.path) 23 query = parsed_path.query 24 self.send_response(200) 25 self.end_headers() 26 result = self.callback(query) 27 message = '\r\n'.join(result) 28 self.wfile.write(message) 29 return
requests.py
1#!/usr/bin/env python 2# conding:utf-8 3 4import requests 5import sys 6import callBackWebServer 7 8def callback_method(query): 9 return ['Hello', 'World', 'with', query] 10 11if __name__ == '__main__': 12 port = sys.argv[1] 13 callBackWebServer.start(port, callback_method)
その後、
python requests.py 23456
をターミナルで起動すると無事にローカルにhtmlリクエストを送信させることができたのですが、この直後に問題が発生しました。Ctrl+cで処理を終了させた後、
もう一度
python requests.py 23456
とコマンドを入力すると、
socket.error: [Errno 48] Address already in use
と、先ほど使用したポートが解放してないためにエラーが出てしまいました。
本当は、
server = HTTPServer(('', int(port)), handler) server.serve_forever()
の部分を
with HTTPServer(('', int(port)), handler) as server: server.serve_forever
と書くべきだったのかもしれません。
そこでプロセスを終了させるために、
ps -auxf | grep python
で調べた結果、
user 1624 0.0 0.5 8328 4896 pts/0 T ***** 0:00 \_ python user 2744 0.0 0.2 4712 1968 pts/0 S+ ***** 0:00 \_ grep --color=auto python
と出力されたため、
kill 1624
と実行させましたが、上記のエラーは改善されず、ポートが使用中のままになっています。
どなたか、この解決方法を教えていただけないでしょうか。
回答2件
あなたの回答
tips
プレビュー