Flask应用程序崩溃“使用重新加载器重新启动.... socket.error:[Errno 98]地址已在使用中

时间:2014-07-17 09:54:03

标签: python flask webserver jinja2

在我的烧瓶应用程序中,我导入了一个包含python变量的文件。然后我将此变量传递给html模板并使用jinja2模板在浏览器上显示它。

我在这里做的是将用户重定向到一个呈现html文件的url并将此python变量传递给jinja2模板。我使用脚本更新此文件并不时更改变量值。

当我更新模块文件并更改变量值时,我的烧瓶应用程序崩溃了。 请让我知道我做错了什么,我是网络开发的新手。另外我想知道他们是否是我们可以在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

访问该页面

答案 1 :(得分:0)

'已在使用的地址'表示您已在该计算机上运行另一台绑定到同一端口的服务器。把它关掉,你应该好好去。