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,并且没有任何异常和警告。

目录
相关文章
|
8天前
|
Python
python之os模块
python之os模块
|
5天前
|
移动开发 Unix Linux
30天拿下Python之os模块
30天拿下Python之os模块
|
2月前
|
开发工具 数据安全/隐私保护 Python
【Azure 环境】通过Python SDK收集所有订阅简略信息,例如订阅id 名称, 资源组及组内资源信息等,如何给Python应用赋予相应的权限才能获取到信息呢?
【Azure 环境】通过Python SDK收集所有订阅简略信息,例如订阅id 名称, 资源组及组内资源信息等,如何给Python应用赋予相应的权限才能获取到信息呢?
|
3月前
|
Python
Python基本文件操作及os库
以上仅为Python文件操作和os库的基本用法,实际使用中需要根据具体需求进行调整。
22 1
|
3月前
|
Python
Python基本文件操作及os库
以上仅为Python文件操作和os库的基本用法,实际使用中需要根据具体需求进行调整。
28 1
|
4月前
|
Python
Python的`os`模块核心功能概述:通过`os.getcwd()`获取
【6月更文挑战第23天】Python的`os`模块核心功能概述:通过`os.getcwd()`获取、`os.chdir()`改变工作目录;使用`os.mkdir()`, `os.makedirs()`创建目录,`os.rmdir()`, `os.removedirs()`删除;`os.rename()`, `os.renames()`重命名文件或目录;`os.remove()`删除文件;`os.listdir()`列出目录内容;`os.path.exists()`, `os.path.isfile()`, `os.path.isdir()`检查路径;`os.stat()`获取文件属性。
81 4
|
4月前
|
Python
Python中使用os库管理环境变量
在Python中,可以使用os库来管理操作系统的环境变量。通过os.environ对象,我们可以获取、修改和删除环境变量的值。
58 3
|
4月前
|
Unix Shell Python
Python教程:开箱即用的Python os模块知识
注:文末有福利小工具源码 Python 的 os 模块提供了许多接口用于与操作系统进行交互,包括文件操作、目录操作、路径操作、环境变量操作、系统信息获取等
37 1
|
3月前
|
Python
在Python中,`os`模块提供了与操作系统交互的多种方式。
在Python中,`os`模块提供了与操作系统交互的多种方式。
|
4月前
|
Unix 关系型数据库 API
Python OS 文件/目录方法
Python OS 文件/目录方法
下一篇
无影云桌面