使用WSGI和Apache运行时Python的工作目录

J-b*_*bob 9 mod-wsgi apache2

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

有没有办法,可能在WSGI配置文件中,更改工作目录,或以某种方式控制它将保存到哪里?如果可能的话,我想使用相对路径进行保存(它使代码更具可移植性),这就是更改工作目录是最佳解决方案的原因.

Gra*_*ton 20

你不应该改变工作目录.

使用:

import os
here = os.path.dirname(__file__)
Run Code Online (Sandbox Code Playgroud)

here然后,该变量将包含该代码文件所在的目录.然后,您可以构建相对于此的事物的绝对路径.

database = os.path.join(here, 'database.db')
Run Code Online (Sandbox Code Playgroud)

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

与往常一样,请务必阅读文档.文件的相关部分是:

  • 不,你不能使用getcwd(),因为mod_wsgi下的当前工作目录通常不会是代码所在的位置.阅读引用的第一个链接,因为它解释了. (4认同)