我正在使用Linux上的cron-scheduled CodeIgniter
程序从Python 2.7
应用程序树中创建各种HTML文件部分,图像缩略图等。实际的Python程序存在于CodeIgniter
树下的应用程序目录下一级子目录中,如下所示。
codeigniter/web-root
|
application
| |
| scripts
| | |
| | my-program.py
| |
| database
| |
| database.sqlite
images
我想使用codeigniter/web-root
模块中的方法从my-program.py
中确定os.path
目录。但是,codeigniter/web-root
的绝对路径在开发和生产环境中是不同的,因此我不希望将此路径信息硬连接到Python程序本身。
当前脚本使用以下构造来确定“codeigniter / web-root”的绝对路径,这是两个环境中脚本本身之上的两个目录级别。
#!/bin/env python2.7
import os.path
ci_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
是否有更简洁的方法可以在不使用多个os.path.dirname
调用的情况下确定顶级(ci_root)目录?
答案 0 :(得分:2)
import os.path
print os.path.abspath(__file__+'/../../..') # the directory three levels up
我很惊喜
对于跨平台兼容性,如果abspath的解析不起作用,我们可以使用不太可读的东西,例如。
答案 1 :(得分:1)
根据“向上三个目录”的相对路径找到真实路径,并提取该真实路径的最后一部分。
[编辑:在回复您的评论时,我已修改此内容。在我看来,它变得越来越复杂
足够你的dirname
链更好。至少很容易理解它发生了什么。]
from os import path as p
_, ci_root = p.split(p.abspath(p.join(__file__, '../../..')))