Reputation: 21297
I am using bottlepy to develop my app. Using paste
as server.
from bottle import route, run, template
@route('/hello/<name>')
def index(name):
return template('<b>Hello {{name}}</b>!', name=name)
run(host='localhost',
port=8080,
debug=True,
reloader=True,
server='paste')
If one of the other services is running on same port 8080
, I got message
python /tmp/test.py
Bottle v0.12.8 server starting up (using PasteServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.
Traceback (most recent call last):
File "/Users/test/venv/lib/python2.7/site-packages/bottle.py", line 3113, in run
server.run(app)
File "/Users/test/venv/lib/python2.7/site-packages/bottle.py", line 2812, in run
**self.options)
File "/Users/test/venv/lib/python2.7/site-packages/paste/httpserver.py", line 1310, in serve
request_queue_size=request_queue_size)
File "/Users/test/venv/lib/python2.7/site-packages/paste/httpserver.py", line 1153, in __init__
request_queue_size=request_queue_size)
File "/Users/test/venv/lib/python2.7/site-packages/paste/httpserver.py", line 1132, in __init__
request_queue_size=request_queue_size)
File "/Users/test/venv/lib/python2.7/site-packages/paste/httpserver.py", line 345, in __init__
HTTPServer.__init__(self, server_address, RequestHandlerClass)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 420, in __init__
self.server_bind()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/BaseHTTPServer.py", line 108, in server_bind
SocketServer.TCPServer.server_bind(self)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 434, in server_bind
self.socket.bind(self.server_address)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
error: [Errno 48] Address already in use
Bottle v0.12.8 server starting up (using PasteServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.
Traceback (most recent call last):
File "/Users/test/venv/lib/python2.7/site-packages/bottle.py", line 3113, in run
server.run(app)
File "/Users/test/venv/lib/python2.7/site-packages/bottle.py", line 2812, in run
**self.options)
File "/Users/test/venv/lib/python2.7/site-packages/paste/httpserver.py", line 1310, in serve
request_queue_size=request_queue_size)
File "/Users/test/venv/lib/python2.7/site-packages/paste/httpserver.py", line 1153, in __init__
request_queue_size=request_queue_size)
File "/Users/test/venv/lib/python2.7/site-packages/paste/httpserver.py", line 1132, in __init__
request_queue_size=request_queue_size)
File "/Users/test/venv/lib/python2.7/site-packages/paste/httpserver.py", line 345, in __init__
HTTPServer.__init__(self, server_address, RequestHandlerClass)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 420, in __init__
self.server_bind()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/BaseHTTPServer.py", line 108, in server_bind
SocketServer.TCPServer.server_bind(self)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 434, in server_bind
self.socket.bind(self.server_address)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
error: [Errno 48] Address already in use
Bottle v0.12.8 server starting up (using PasteServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.
Its continuing and not stoping, I can add try...catch..
and catch this exception and kill the process. But before that, I want to know that, is there any parameter which I can pass and this stops automatically?
If I set reloader=False
then it works. Is there any way to make this works with reloader=True
?
I read, and reloader
is for auto reload, if file change, but if port is not available then also its trying to restart server.
Upvotes: 2
Views: 411
Reputation: 159
how about this one:
import socket
def is_port_in_use(port):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
return s.connect_ex(('localhost', port)) == 0
if not is_port_in_use(8080):
run(host='localhost',
port=8080,
debug=True,
reloader=True,
server='paste')
for python 2.7 use:
from contextlib import closing
import socket
def is_port_in_use(port):
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
return s.connect_ex(('localhost', port)) == 0
Upvotes: 2