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,並且沒有任何異常和警告。

發佈了31 篇原創文章 · 獲贊 11 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章