我有一个Web应用程序,除其他外,将查询数据库并使用数据创建Excel电子表格。在将文件发送到客户端计算机之前,我需要将电子表格保存到服务器的磁盘。我正在使用Flask框架和openpyxl来生成电子表格。在Flask的开发服务器上运行时,一切正常,但真正的服务器是带有WSGI的Apache2。当我在那里运行时,在尝试保存电子表格时会引发“权限被拒绝”错误。我不知道在Apache / WSGI中运行时Python的工作目录是什么。
有没有办法,可能在WSGI配置文件中,更改工作目录,或以某种方式控制它将保存到哪里?如果可能的话,我想使用相对路径进行保存(它使代码更具可移植性),这就是更改工作目录是最佳解决方案的原因。
你不应该改变工作目录。
使用:
import os
here = os.path.dirname(__file__)
然后,变量here
将包含该代码文件所在的目录。然后,您可以构建相对于此的事物的绝对路径。
database = os.path.join(here, 'database.db')
请注意,您的代码在Apache中运行的用户仍然需要对该目录的读/写访问权限。
与往常一样,请务必阅读文档。文件的相关部分是:
我有一个类似的问题,我想使用具有相对路径的glob()。它在我的开发环境中工作,但在mod_wsgi的服务器上没有。我发现here有一个'home ='选项,你可以添加到WSGIDaemonProcess指令来设置你的应用程序的初始工作目录。您可以在虚拟主机文件中找到(在我的系统中/etc/apache2/sites-available/mysite.conf中)