import os import os.path import pathlib import shutil def realpath(p): return str(pathlib.Path(p).resolve()) #from os.path import realpath def test_recursion(depth): print('depth =', depth) old_path = os.getcwd() os.mkdir('testdir') try: abspath = os.path.abspath('testdir') for i in range(depth): print('symlink', '/'.join(['%d' % i] * 2), '->', 'testdir/%d' % (i + 1)) os.symlink('/'.join(['%d' % i] * 2), 'testdir/%d' % (i + 1)) print('symlink', '.', '->', 'testdir/0') os.symlink('.', 'testdir/0') print('resolve', 'testdir/%d' % depth) assert realpath('testdir/%d' % depth) == abspath, '%r != %r' % (realpath('testdir/%d' % depth), abspath) finally: os.chdir(old_path) shutil.rmtree('testdir') test_recursion(1) test_recursion(2) test_recursion(3) test_recursion(100)