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验证码识别处理实例
Dec 28 Python
使用Python实现windows下的抓包与解析
Jan 15 Python
python 读取摄像头数据并保存的实例
Aug 03 Python
python实现微信小程序自动回复
Sep 10 Python
彻彻底底地理解Python中的编码问题
Oct 15 Python
基于Python对数据shape的常见操作详解
Dec 25 Python
python基于socket进行端口转发实现后门隐藏的示例
Jul 25 Python
python try except返回异常的信息字符串代码实例
Aug 15 Python
windows下Pycharm安装opencv的多种方法
Mar 05 Python
通过python 执行 nohup 不生效的解决
Apr 16 Python
如何用 Python 制作一个迷宫游戏
Feb 25 Python
python 对xml解析的示例
Feb 27 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
转换中文日期的PHP程序
2006/10/09 PHP
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
php 应用程序安全防范技术研究
2009/09/25 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
如何设置mysql允许外网访问
2013/06/04 PHP
php生成短域名函数
2015/03/23 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
Vue实现自定义下拉菜单功能
2018/07/16 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
python实现按行切分文本文件的方法
2016/04/18 Python
使用Python微信库itchat获得好友和群组已撤回的消息
2018/06/24 Python
python保存网页图片到本地的方法
2018/07/24 Python
Python画图高斯分布的示例
2019/07/10 Python
对python3中的RE(正则表达式)-详细总结
2019/07/23 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
在pycharm中为项目导入anacodna环境的操作方法
2020/02/12 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
2020/07/13 Python
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
音乐表演专业毕业生求职信
2013/10/14 职场文书
新闻专业个人求职信
2013/12/19 职场文书
装饰资料员岗位职责
2013/12/30 职场文书
初中校园之声广播稿
2014/01/15 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
适合毕业生创业的项目怎么找?
2019/08/08 职场文书
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers