python os.path.isdir权限问题小坑一个-阿里云开发者社区

开发者社区> 开发与运维> 正文

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

简介: 使用django搞一个东西玩,python manager.py runserver的时候,一切正常。将项目部署到apache之后,出现了问题。定位到问题所在: if not os.
使用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,并且没有任何异常和警告。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章