В настоящее время я изучаю CherryPy, использующий Python 2.7 на PyCharm, на Windows 10. Хотя я выполнил на нем несколько программ, я кое-что заметил. Первый раз, когда я запускаю программу, она успешно выполняется, и требуемый o / p появляется на локальном порте 8080 в браузере.
Однако, если я изменю что-то в той же программе и снова запущу, я получу следующее:
C:\Python27\python.exe C:/Users/ymodak/Desktop/Training/x.py
[03/Jul/2018:11:15:37] ENGINE Listening for SIGTERM.
[03/Jul/2018:11:15:37] ENGINE Bus STARTING
CherryPy Checker:
The Application mounted at '' has an empty config.
[03/Jul/2018:11:15:37] ENGINE Set handler for console events.
[03/Jul/2018:11:15:37] ENGINE Started monitor thread 'Autoreloader'.
[03/Jul/2018:11:15:39] ENGINE Error in 'start' listener <bound method
Server.start of <cherrypy._cpserver.Server object at 0x0000000003B14F98>>
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\cherrypy\process\wspbus.py", line 230, in publish
output.append(listener(*args, **kwargs))
File "C:\Python27\lib\site-packages\cherrypy\_cpserver.py", line 191, in start
super(Server, self).start()
File "C:\Python27\lib\site-packages\cherrypy\process\servers.py", line 177, in start
portend.free(*self.bind_addr, timeout=Timeouts.free)
File "C:\Python27\lib\site-packages\portend.py", line 119, in free
raise Timeout("Port {port} not free on {host}.".format(**locals()))
Timeout: Port 8080 not free on 127.0.0.1.
[03/Jul/2018:11:15:39] ENGINE Shutting down due to error in start listener:
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\cherrypy\process\wspbus.py", line 268, in start
self.publish('start')
File "C:\Python27\lib\site-packages\cherrypy\process\wspbus.py", line 248, in publish
raise exc
ChannelFailures: Timeout('Port 8080 not free on 127.0.0.1.',)
[03/Jul/2018:11:15:39] ENGINE Bus STOPPING
[03/Jul/2018:11:15:39] ENGINE HTTP Server
cherrypy._cpwsgi_server.CPWSGIServer(('127.0.0.1', 8080)) already shut down
[03/Jul/2018:11:15:39] ENGINE Stopped thread 'Autoreloader'.
[03/Jul/2018:11:15:39] ENGINE Removed handler for console events.
[03/Jul/2018:11:15:39] ENGINE Bus STOPPED
[03/Jul/2018:11:15:39] ENGINE Bus EXITING
[03/Jul/2018:11:15:39] ENGINE Bus EXITED
Process finished with exit code 70
Я уже посмотрел:
1. Как убить используемый в данный момент порт на localhost в windows?
2. Ошибка: этот порт уже используется.
Но я хочу знать, как закрыть порт сразу после того, как я остановил выполнение программы, и закрыть браузер. То есть я хочу, чтобы порт автоматически закрывался, когда выполняемая на нем программа закрывалась. Есть ли способ сделать это? Любая помощь приветствуется. Заранее большое спасибо.
P.S: Это программа, которую я запускаю:
import random
import string
import cherrypy
class StringGenerator(object):
@cherrypy.expose
def index(self):
return """<html>
<head></head>
<body>
<form method="put" action="generate">
<input type="text" value="8" name="length" />
<button type="submit">Generate!</button>
</form>
</body>
</html>"""
@cherrypy.expose
def generate(self, length=8):
return ''.join(random.sample(string.hexdigits, int(length)))
if __name__ == '__main__':
cherrypy.quickstart(StringGenerator())