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

时间: 2024-09-20 23:02:03

python os.path.isdir权限问题小坑一个的相关文章

Python os.path.help

Help on module posixpath in os:NAME posixpath - Common operations on Posix pathnames.FILE /usr/lib/python2.6/posixpath.pyMODULE DOCS http://docs.python.org/library/posixpathDESCRIPTION Instead of importing this module directly, import os and refer to

Python中的os.path路径模块中的操作方法总结_python

解析路径路径解析依赖与os中定义的一些变量: os.sep-路径各部分之间的分隔符. os.extsep-文件名与文件扩展名之间的分隔符. os.pardir-路径中表示目录树上一级的部分. os.curdir-路径中当前目录的部分. split()函数将路径分解为两个单独的部分,并返回包含这些结果的tuple.第二个元素是路径的最后部分,地一个元素是其他部分. import os.path for path in [ '/one/two/three', '/one/two/three/', '

Python os模块中的isfile()和isdir()函数均返回false问题解决方法_python

今天在写一个linux下自动备份指定目录下的所有目录的脚本时,遇到了一个问题,由于我是需要备份目录,所以,需要判断扫描的文件是否为目录,当我用os.path.isdir()来判断的时候,发现所有文件均返回false,刚开始以为是系统兼容性问题,进一步测试,发现用os.path.isfile(),这些文件还是返回false,这肯定就是程序写的有问题了,代码如下: #!/usr/bin/env python # a python script to auto backup a directory's

Python标准库03 路径与文件 (os.path包, glob包)

原文:Python标准库03 路径与文件 (os.path包, glob包) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   路径与文件的简介请参看Linux文件系统   os.path包 os.path包主要是处理路径字符串,比如说'/home/vamei/doc/file.txt',提取出有用信息. import os.path path = '/home/vamei/doc/file.txt' print(os.pa

Python标准库os.path包、glob包使用实例_python

os.path包 os.path包主要用于处理字符串路径,比如'/home/zikong/doc/file.doc',提取出有用的信息. 复制代码 代码如下: import os.path path = '/home/zikong/doc/file.doc' print(os.path.basename(path))    # 查询路径中包含的文件名 print(os.path.dirname(path))     # 查询路径中包含的目录 info = os.path.split(path) 

Python os模块介绍_python

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir 获取当前目录的父目录字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os

Python OS模块详解

前言 Python标准库中的OS模块,提供一种可移植的方式(程序与平台无关)来使用依赖于操作系统的功能.简而言之,os模块提供了许多能够直接操纵不同的操作系统的Python接口.一个操作系统所能提供的常用命令行接口,在os模块中基本都能做到.本篇主要是对os模块中常用属性和方法的记录.想了解更详细的使用推荐使用Python中文文档,点这里. 软件环境 系统  RHEL 7 软件  Pyhon 27 os模块内建属性 os.name 获取执行平台的类型 操作系统相关模块的名字.目前已经注册以下的名

python os&shutil 文件操作

# os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是 'posix' os.getcwd() 函数得到当前工作目录,即当前Python脚本工作的目录路径 os.getenv() 获取一个环境变量,如果没有返回none os.putenv(key, value) 设置一个环境变量值 os.listdir(path) 返回指定目录下的所有文件

Python os模块学习笔记

  这篇文章主要介绍了Python os模块学习笔记,本文总结了OS模块的常用方法.实用方法,并给出了两个使用实例,需要的朋友可以参考下 一.os模块概述 Python os模块包含普遍的操作系统功能.例如文件的复制.创建.修改.删除文件及文件夹... 二.常用方法 1.os.listdir() 返回指定目录下的所有文件和目录名. 2.os.remove() 删除一个文件. 3.os.system() 运行shell命令. 4.os.path.split() 函数返回一个路径的目录名和文件名 5