Python の chroot タイプの動作をシミュレートする方法を探しています。os.chroot
ドキュメントによると、Unix でのみ動作します。Windowsにも必要です。私がそれを実装しようとした 1 つの方法は、ルート パスと、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
例えば。の場合root=/home/user/
、rel_path=/abc/../../
絶対パスに評価する必要があります/home/user/
。これを実装するためのより良い方法は何ですか?