python - 업데이트 - 파이썬에서 심볼릭 링크 수정하기




파이썬 심볼릭 링크 (4)

파이썬에서 한 파일에서 다른 파일을 가리 키도록 심볼릭 링크로 어떻게 변경합니까? os.symlink () 함수는 새로운 심볼릭 링크를 만드는 것으로 보인다.


e.errno! = errno.EEXIST의 경우 raise 명령을 추가하는 것을 잊지 마십시오. 그러면 오류를 숨기고 싶지는 않을 것입니다 :

if e.errno == errno.EEXIST:
     os.remove(link_name)
     os.symlink(target, link_name)
else:
    raise

나는이 질문을 최근에 연구했고, 가장 좋은 방법은 실제로 symlinkunlink 하고 symlink 를한다는 것을 알았다. 하지만 예를 들어 auto-replace와 같이 끊어진 링크를 수정해야하는 경우 os.readlink 를 수행 할 수 있습니다.

for f in os.listdir(dir):
    path = os.path.join(dir, f)
    old_link = os.readlink(path)
    new_link = old_link.replace(before, after)
    os.unlink(path)
    os.symlink(new_link, path)

원자 수정이 필요한 경우 링크 해제가 작동하지 않습니다.

더 나은 해결책은 새로운 임시 심볼릭 링크를 생성 한 다음 기존의 심볼릭 링크로 이름을 변경하는 것입니다.

os.symlink(target, tmpLink)
os.rename(tmpLink, linkName)

또한 올바르게 업데이트되었는지 확인할 수 있습니다.

if os.path.realpath(linkName) == target:
    # Symlink was updated

그러나 os.rename의 설명서에 따르면 Windows에서 심볼릭 링크를 원자 적으로 변경할 수있는 방법이 없을 수 있습니다. 이 경우 삭제하고 다시 만듭니다.


os.unlink() 를 먼저 수행 한 다음 os.symlink() 를 사용하여 새 대상을 가리 키도록 할 수 있습니다.





symlink