Flask应用崩溃 "重启中....socket.error: [Errno 98] 地址已被占用
在我的Flask应用中,我导入了一个文件,这个文件里有一些Python变量。然后我把这些变量传递给HTML模板,并通过Jinja2模板引擎在浏览器上显示出来。
我在这里做的事情是,把用户重定向到一个网址,这个网址会渲染一个HTML文件,并把这个Python变量传递给Jinja2模板。我会定期更新这个文件,并通过一个脚本来改变变量的值。
但是,当我更新我的模块文件并改变变量的值时,我的Flask应用就崩溃了。请告诉我我哪里做错了,我对网页开发还很陌生。另外,我也想知道有没有办法在Jinja2模板中导入Python变量。
* Detected change in '/root/Tas/modules/steps.py', reloading
* Restarting with reloader
Traceback (most recent call last):
File "routes.py", line 45, in <module>
app.run(host='0.0.0.0', debug=True,use_reloader=True)
File "/root/Tas/venv/lib/python2.6/site-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
File "/root/Tas/venv/lib/python2.6/site-packages/werkzeug/serving.py", line 706, in run_simple
test_socket.bind((hostname, port))
File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use
我的代码:
from flask import Flask, render_template, request, flash, redirect, url_for
from forms import UpgradeForm
import subprocess
import os
import sys
sys.path.append('/root/Tas/modules/')
import time
import reko
import tibbr_path
import steps
app = Flask(__name__)
app.secret_key = 'development key'
@app.route('/')
def home():
return render_template('home.html')
@app.route('/upgrade', methods=['GET', 'POST'])
def upgrade():
form = UpgradeForm(request.form)
if request.method == 'POST':
if form.validate() == False:
flash('All Fields are required')
return render_template('upgrade.html', form=form)
else:
fo = open("/root/Tas/modules/reko.py", "wb")
print form.username.data
fo.write("username='%s'\npassword='%s'\npack_pack='%s'\nup_server='%s'\n" % (form.username.data, form.password.data, form.pack_pack.data, form.up_server.data))
fo.close()
return render_template('validate.html', form=form)
elif request.method == 'GET':
return render_template('upgrade.html', form=form)
@app.route('/exec_SNupgrade', methods=['GET'])
def exec_SNupgrade():
os.system("/root/Tas/scripts/int_SNupgrade.py &")
return redirect(url_for('display_step'))
)
@app.route('/display_step', methods=['GET'])
def display_step():
return render_template('display_step.html', up_server=reko.up_server, step1=steps.step1 , step2=steps.step2, step3=steps.step3, step4=steps.step4)
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True,use_reloader=True)
2 个回答
0
'地址已在使用'的意思是,你的电脑上已经有另一个服务器在运行,并且它占用了同样的端口。把那个服务器关掉,你就可以正常使用了。
3
如果这个地址已经被占用了,那就换一个默认的端口。
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True, port=12345, use_reloader=True)
现在你可以通过 http://localhost:12345
来访问这个页面。