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




파이썬 심볼릭 링크 (4)

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


나는이 질문을 최근에 연구했고, 가장 좋은 방법은 실제로 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)

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

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

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


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

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

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

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

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

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





symlink