9

我有一个 Web 应用程序,除其他外,它将查询数据库并使用数据创建 Excel 电子表格。在将文件发送到客户端计算机之前,我需要将电子表格保存到服务器的磁盘。我正在使用 Flask 框架和 openpyxl 来生成电子表格。在 Flask 的开发服务器上运行时一切正常,但真正的服务器是带有 WSGI 的 Apache2。当我在那里运行它时,它会在尝试保存电子表格时引发“权限被拒绝”错误。我不知道在 Apache/WSGI 中运行时 Python 的工作目录是什么。

有没有办法,也许在 WSGI 配置文件中,改变工作目录,或者以某种方式控制它将保存到哪里?如果可能的话,我想使用相对路径进行保存(它使代码更便携),这就是为什么更改工作目录是最好的解决方案。

4

2 回答 2

24

您不应该更改工作目录。

采用:

import os
here = os.path.dirname(__file__)

然后该变量here将包含该代码文件所在的目录。然后,您可以为与之相关的事物构建绝对路径。

database = os.path.join(here, 'database.db')

请注意,您的代码在 Apache 中运行的用户仍需要对该目录的读/写访问权限。

与往常一样,请确保您阅读了文档。文档的相关部分是:

于 2012-08-23T01:12:55.003 回答
1

我有一个类似的问题,我想将 glob() 与相对路径一起使用。它在我的开发环境中有效,但在带有 mod_wsgi 的服务器上无效。我在这里发现有一个 'home=' 选项,您可以将其添加到 WSGIDaemonProcess 指令中以设置应用程序的初始工作目录。您可以在虚拟主机文件中找到它(在我的系统上的 /etc/apache2/sites-available/mysite.conf 中)

于 2019-04-20T17:05:41.013 回答