简单的基本 Flask 应用程序中的权限错误权限被拒绝

Posted

技术标签:

【中文标题】简单的基本 Flask 应用程序中的权限错误权限被拒绝【英文标题】:Permission Error Permission Denied In simple basic Flask Application 【发布时间】:2019-04-06 14:17:31 【问题描述】:

我在基于 vagrant 的 Linux 系统上运行此脚本,这是运行烧瓶应用程序的简单基本代码,我收到此错误:

提高 child_exception_type(errno_num, err_msg) PermissionError: [Errno 13] 权限被拒绝

这是脚本:

#!/usr/bin python3

from flask import Flask
app = Flask(__name__)

@app.route('/')
@app.route('/hello')
def helloworld():
    return 'Hello and Welcome to flask'

if __name__ == '__main__':
    app.debug = True
    app.run(host='0.0.0.0', port=5000)

我得到的错误:

vagrant@vagrant:/vagrant$ python3 project.py
* Serving Flask app "project" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
* Restarting with stat
Traceback (most recent call last):
File "project.py", line 14, in <module>
app.run(host='0.0.0.0', port=5000)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 943,           in run run_simple(host, port, self, **options)
File "/usr/local/lib/python3.5/dist-packages/werkzeug/serving.py", line  988, in run_simple
run_with_reloader(inner, extra_files, reloader_interval, reloader_type)
File "/usr/local/lib/python3.5/dist-packages/werkzeug/_reloader.py", line 332, in run_with_reloader
sys.exit(reloader.restart_with_reloader())
File "/usr/local/lib/python3.5/dist-packages/werkzeug/_reloader.py", line 176, in restart_with_reloader
exit_code = subprocess.call(args, env=new_environ, close_fds=False)
File "/usr/lib/python3.5/subprocess.py", line 557, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/lib/python3.5/subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child
raise child_exception_type(errno_num, err_msg)
PermissionError: [Errno 13] Permission denied

【问题讨论】:

【参考方案1】:

也许这是一个权限错误,因为Vagrant 正在尝试运行您的烧瓶应用程序并且没有必要的可执行权限?

我这样说是因为你的堆栈跟踪的这一部分:

PermissionError: [Errno 13] 权限被拒绝

这行代码似乎失败了:app.run(host='0.0.0.0', port=5000)

也许您可以在包含您的烧瓶项目的目录上授予可执行权限,看看这是否有助于解决您的问题:

chmod -R 755 /path/to/directory

希望对您有所帮助!

【讨论】:

其他python脚本在同一目录中运行没有任何权限问题我也有一些脚本执行数据库查询一切正常,我也不认为它必须与当前工作目录做某事或脚本权限,因为 vagrant 提供了一个名为 /vagrant 的目录来在我的机器和 vagrant box 之间共享文件,无论如何我尝试了你所说的仍然没有工作。【参考方案2】:

既然你是在使用 Vagrant 构建的虚拟机中玩游戏,你肯定做过类似的事情

vagrant@vagrant:/vagrant$ sudo pip3 install flask

首先。可能您安装了其他一些软件包。根据您使用的基本操作系统,使用pip(或pip3)在系统级别(甚至在虚拟机中)安装可能会导致问题。

在与我的基本安装进行了几次角力之后,我现在总是在 VM 内部使用 virtualenv,以便所有软件包安装都是本地的。

我敢打赌

vagrant@vagrant:/vagrant$ sudo apt-get install -y python-virtualenv
vagrant@vagrant:/vagrant$ virtualenv --python=python3 venv
vagrant@vagrant:/vagrant$ venv/bin/pip install flask
vagrant@vagrant:/vagrant$ ven/bin/python project.py

会给你一个更好的结果。

【讨论】:

我试过你说的,没用,是不是因为我有通过内联脚本运行的规定,该脚本运行所有命令而不需要 sudo 例如。像 'apt-get -qqy install python3 python3-pip' 我想知道它与不使用 sudo 命令首先在本地安装 python3 有什么关系。 我在配置 VM 时总是使用 sudo apt-get install。当你第一次这样做vagrant up 时,请非常仔细地检查输出。很多时候,严重的供应问题可能会被忽视。 问题是我的 vagrant 根本没有提供内联 shell 脚本,这就是为什么我必须在 ssh 进入机器之后手动运行每个命令。顺便说一句,我设置了 'app.debug=False' 并且它起作用了【参考方案3】:

我也遇到了同样的问题,原来是端口需要大于5000:

from flask import Flask, request, abort, jsonify

app = Flask(__name__)


@app.route('/getSquare', methods=['POST'])
def get_square():
    pass

    return jsonify('answer': num ** 2)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5001, debug=True) # make sure port is > 5000

【讨论】:

以上是关于简单的基本 Flask 应用程序中的权限错误权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

基于Flask实现后台权限管理系统 - Flask

基于Flask实现后台权限管理系统 - 表设计

PermissionError: [Errno 13] 权限被拒绝 Flask.run()

Flask 扫盲系列-权限设置

在一个简单的程序中加载 ebpf 程序时,以 sudo 和 root 身份运行会给出错误权限被拒绝

Flask—Login中权限(角色)管理的实现方法?