我正在寻找一种方法来模拟 python 的 chroot 类型行为。os.chroot
根据文档,仅适用于 Unix。我也需要它用于 Windows。我尝试实现它的一种方法是定义一个根路径和abs_path
一个将给定路径相对于根进行转换的方法。这是abs_path
删除一些不相关代码后的片段。self.wd.get()
获取当前工作目录。
def abs_path(self, rel_path):
"""
Converts relative path to absolute path
Taking care of the virtual root
"""
if rel_path == '':
return os.path.abspath(os.path.join(self.root, self.wd.get()))
if rel_path[0] == '/':
ret = os.path.join(self.root, rel_path)
else:
ret = os.path.join(self.root, self.wd.get(), rel_path)
ret = os.path.abspath(ret)
if ret.find(self.root) == 0:
return ret
return self.root
这似乎在 Linux 下运行良好,我相信它也应该在 Windows 下运行良好。我担心的主要事情是if ret.find(self.root) == 0:
,我用它来检查ret
评估到高于根的路径的情况。例如。if root=/home/user/
, thenrel_path=/abc/../../
应该评估为绝对路径/home/user/
。实现这一点的更好方法应该是什么?