python os.path.isdir权限问题小坑一个

使用django搞一个东西玩,python manager.py runserver的时候,一切正常。将项目部署到apache之后,出现了问题。
定位到问题所在:
    if not os.path.isdir(working_dir):
        return

 

为什么apache里面认为这个目录不存在了呢,查看isdir的定义:
os.path.isdir(path)
    Return True if path is an existing directory. This follows symbolic links, so both islink() and isdir() can be true for the same path.

 并没有什么特别的。


经过分析,怀疑是权限问题导致的,python manager.py runserver的时候,是以我的用户名启动的;部署到apache的时候,是以www-data用户名启动的。修改apache.conf中的启动用户名和用户组之后,sudo /etc/init.d/apache restart后,可以使用了。当然也可以把working_dir以及上层目录的权限设置一下。


问题复现:
先建立测试用的目录结构
sudo mkdir /tmp/test
sudo mkdir /tmp/test/hello
sudo chmod -R 700 /tmp/test
启动python:$ python,输入
import os
os.path.isdir("/tmp/test/hello")

 得到False
以root启动python: $ sudo python,输入

import os
os.path.isdir("/tmp/test/hello")

 得到True

结论,即使目录存在,os.path.isdir也可能因为权限问题而返回False,并且没有任何异常和警告。

上一篇:Java零基础入门学习1:初探Java世界


下一篇:android emulator虚拟设备分析第五篇之pipe上的opengles