python flask 如何修改默认端口号的方法步骤


Posted in Python onJuly 12, 2019

场景:按照github文档上启动一个flask的app,默认是用5000端口,如果5000端口被占用,启动失败。

样例代码:

from flask import Flask
 
app = Flask(__name__)
 
@app.route('/')
def hello():
  return 'Hello, World!'

启动的脚本:

$ env FLASK_APP=hello.py flask run

出错信息如下:

renjg@renjg-HP-Compaq-Pro-6380-MT:~/WorkSpace/python/django$ env FLASK_APP=index.py flask run
 * Serving Flask app "index.py"
 * Environment: production
  WARNING: Do not use the development server in a production environment.
  Use a production WSGI server instead.
 * Debug mode: off
Traceback (most recent call last):
 File "/usr/local/bin/flask", line 11, in <module>
  sys.exit(main())
 File "/usr/local/lib/python2.7/dist-packages/flask/cli.py", line 894, in main
  cli.main(args=args, prog_name=name)
 File "/usr/local/lib/python2.7/dist-packages/flask/cli.py", line 557, in main
  return super(FlaskGroup, self).main(*args, **kwargs)
 File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 717, in main
  rv = self.invoke(ctx)
 File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 1137, in invoke
  return _process_result(sub_ctx.command.invoke(sub_ctx))
 File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 956, in invoke
  return ctx.invoke(self.callback, **ctx.params)
 File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 555, in invoke
  return callback(*args, **kwargs)
 File "/usr/local/lib/python2.7/dist-packages/click/decorators.py", line 64, in new_func
  return ctx.invoke(f, obj, *args, **kwargs)
 File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 555, in invoke
  return callback(*args, **kwargs)
 File "/usr/local/lib/python2.7/dist-packages/flask/cli.py", line 771, in run_command
  threaded=with_threads, ssl_context=cert)
 File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 814, in run_simple
  inner()
 File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 774, in inner
  fd=fd)
 File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 660, in make_server
  passthrough_errors, ssl_context, fd=fd)
 File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 577, in __init__
  self.address_family), handler)
 File "/usr/lib/python2.7/SocketServer.py", line 417, in __init__
  self.server_bind()
 File "/usr/lib/python2.7/BaseHTTPServer.py", line 108, in server_bind
  SocketServer.TCPServer.server_bind(self)
 File "/usr/lib/python2.7/SocketServer.py", line 431, in server_bind
  self.socket.bind(self.server_address)
 File "/usr/lib/python2.7/socket.py", line 228, in meth
  return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use

问题:

那么该怎么指定新的端口呢?又如何查看5000端口指定的位置呢?

源码分析,首先clone github上的flask框架,然后直接grep命令查看5000的位置。

renjg@renjg-HP-Compaq-Pro-6380-MT:~/WorkSpace/python/django/flask$ grep 5000 * -nrw
docs/patterns/appdispatch.rst:28:  run_simple('localhost', 5000, application, use_reloader=True)
docs/patterns/appdispatch.rst:48:    run_simple('localhost', 5000, app,
docs/config.rst:417:   * Running on http://127.0.0.1:5000/
docs/config.rst:453:   * Running on http://127.0.0.1:5000/
docs/quickstart.rst:51:   * Running on http://127.0.0.1:5000/
docs/quickstart.rst:66:   * Running on http://127.0.0.1:5000/
docs/quickstart.rst:72:Now head over to `http://127.0.0.1:5000/ <http://127.0.0.1:5000/>`_, and you
docs/deploying/wsgi-standalone.rst:38:  $ uwsgi --http 127.0.0.1:5000 --module myproject:app
docs/deploying/wsgi-standalone.rst:55:  http_server = WSGIServer(('', 5000), app)
docs/server.rst:26:*http://localhost:5000/*.
docs/cli.rst:97:   * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
docs/cli.rst:143:   * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
docs/tutorial/static.rst:58:Go to http://127.0.0.1:5000/auth/login and the page should look like the
docs/tutorial/factory.rst:169:   * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
docs/tutorial/factory.rst:174:Visit http://127.0.0.1:5000/hello in a browser and you should see the
docs/tutorial/templates.rst:174:then go to http://127.0.0.1:5000/auth/register.
examples/javascript/README.rst:39:Open http://127.0.0.1:5000 in a browser.
examples/tutorial/README.rst:62:Open http://127.0.0.1:5000 in a browser.
<strong>flask/app.py:878:    :param port: the port of the webserver. Defaults to ``5000`` or the
flask/app.py:925:    _port = 5000
flask/cli.py:738:@click.option('--port', '-p', default=5000,</strong>
README.rst:43:   * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
tests/test_basic.py:369:    SERVER_NAME='localhost:5000',
tests/test_basic.py:377:  rv = client.get('/', 'http://localhost:5000/')
tests/test_basic.py:385:    SERVER_NAME='127.0.0.1:5000',
tests/test_basic.py:393:  rv = client.get('/', 'http://127.0.0.1:5000/')
tests/test_basic.py:1448:    SERVER_NAME='localhost.localdomain:5000'
tests/test_basic.py:1463:  rv = client.get('/', 'http://localhost.localdomain:5000')
tests/test_basic.py:1466:  rv = client.get('/', 'https://localhost.localdomain:5000')
tests/test_reqctx.py:72:    SERVER_NAME='localhost.localdomain:5000'
tests/test_reqctx.py:85:        'http://localhost.localdomain:5000/'
tests/test_reqctx.py:89:        'http://foo.localhost.localdomain:5000/'
tests/test_reqctx.py:97:      "('localhost.localdomain:5000') does not match the "

可以看到在flask/app.py 以及cli.py中有指定。那么根据启动命令flask run 实际上是启动了一个http server,然后监听了一个本地端口,等待连接。那么看看是否有相应的参数。

renjg@renjg-HP-Compaq-Pro-6380-MT:~/WorkSpace/python/django/flask$ flask --help
Traceback (most recent call last):
 File "/usr/local/lib/python2.7/dist-packages/flask/cli.py", line 529, in list_commands
  rv.update(info.load_app().cli.list_commands(ctx))
 File "/usr/local/lib/python2.7/dist-packages/flask/cli.py", line 384, in load_app
  'Could not locate a Flask application. You did not provide '
NoAppException: Could not locate a Flask application. You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" or "app.py" module was not found in the current directory.
Usage: flask [OPTIONS] COMMAND [ARGS]...
 
 A general utility script for Flask applications.
 
 Provides commands from Flask, extensions, and the application. Loads the
 application defined in the FLASK_APP environment variable, or from a
 wsgi.py file. Setting the FLASK_ENV environment variable to 'development'
 will enable debug mode.
 
  $ export FLASK_APP=hello.py
  $ export FLASK_ENV=development
  $ flask run
 
Options:
 --version Show the flask version
 --help   Show this message and exit.
 
Commands:
 routes Show the routes for the app.
 run   Runs a development server.
 shell  Runs a shell in the app context.
renjg@renjg-HP-Compaq-Pro-6380-MT:~/WorkSpace/python/django/flask$ flask run --help
Usage: flask run [OPTIONS]
 
 Run a local development server.
 
 This server is for development purposes only. It does not provide the
 stability, security, or performance of production WSGI servers.
 
 The reloader and debugger are enabled by default if FLASK_ENV=development
 or FLASK_DEBUG=1.
 
Options:
 -h, --host TEXT         The interface to bind to.
 <strong> -p, --port INTEGER       The port to bind to.</strong>
 --cert PATH           Specify a certificate file to use HTTPS.
 --key FILE           The key file to use when specifying a
                 certificate.
 --reload / --no-reload     Enable or disable the reloader. By default
                 the reloader is active if debug is enabled.
 --debugger / --no-debugger   Enable or disable the debugger. By default
                 the debugger is active if debug is enabled.
 --eager-loading / --lazy-loader
                 Enable or disable eager loading. By default
                 eager loading is enabled if the reloader is
                 disabled.
 --with-threads / --without-threads
                 Enable or disable multithreading.
 --help             Show this message and exit.

可以看到有-p这个参数,是指定端口的,默认是5000,那么尝试修改一下。

renjg@renjg-HP-Compaq-Pro-6380-MT:~/WorkSpace/python/django$ env FLASK_APP=index.py flask run -p 5001
 * Serving Flask app "index.py"
 * Environment: production
  WARNING: Do not use the development server in a production environment.
  Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5001/ (Press CTRL+C to quit)

还一个5001的端口就成功了,由此可知,当出现一个我们不知道该如何解决问题的时候,我们可以尝试着自己分析源码,得到想要的结果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python多维/嵌套字典数据无限遍历的实现
Nov 04 Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 Python
Python3使用SMTP发送带附件邮件
Jun 16 Python
python中int与str互转方法
Jul 02 Python
tensorflow更改变量的值实例
Jul 30 Python
Python学习笔记之Django创建第一个数据库模型的方法
Aug 07 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
Mar 13 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
Apr 27 Python
浅谈keras中的目标函数和优化函数MSE用法
Jun 10 Python
Python Matplotlib简易教程(小白教程)
Jul 28 Python
python中re模块知识点总结
Jan 17 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
Apr 13 Python
python pandas获取csv指定行 列的操作方法
Jul 12 #Python
Python3 执行Linux Bash命令的方法
Jul 12 #Python
Flask-WTF表单的使用方法
Jul 12 #Python
解决Python中pandas读取*.csv文件出现编码问题
Jul 12 #Python
python的debug实用工具 pdb详解
Jul 12 #Python
Flask配置Cors跨域的实现
Jul 12 #Python
python调用webservice接口的实现
Jul 12 #Python
You might like
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
dedecms集成财付通支付接口
2014/12/28 PHP
详解PHP归并排序的实现
2016/10/18 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
this和执行上下文实现代码
2010/07/01 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
jQuery如何封装输入框插件
2016/08/19 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
详解javascript设计模式三:代理模式
2019/03/25 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
在 Python 应用中使用 MongoDB的方法
2017/01/05 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
python向图片里添加文字
2019/11/26 Python
css3media响应式布局实例
2016/07/08 HTML / CSS
工商管理实习自我鉴定
2013/09/28 职场文书
年终工作总结范文2014
2014/11/27 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
2016年党课培训学习心得体会
2016/01/07 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
python实现进度条的多种实现
2021/04/29 Python