파이썬에서 한 파일에서 다른 파일로 심볼릭 링크를 변경하려면 어떻게해야합니까? os.symlink() 함수는 새로운 심볼릭 링크를 만드는 것으로 보인다.파이썬에서 심볼릭 링크 수정하기
17
A
답변
9
먼저 os.unlink()
수 있으며 os.symlink()
새 대상을 가리 키도록 다시 만듭니다.
6
이 질문을 최근에 조사한 결과, 가장 좋은 방법은 실제로 unlink
이고 그 다음은 symlink
입니다. 당신이 자동 교체와 함께 예를 들어, 깨진 링크를 해결하기 위해 단지 필요한 경우에, 당신은 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)
15
이 때문에 기존 파일의 실패 할 경우 심볼릭 링크와 시도 약간의 기능, 그것을 제거 다시 연결됩니다.
import os, errno
def symlink_force(target, link_name):
try:
os.symlink(target, link_name)
except OSError, e:
if e.errno == errno.EEXIST:
os.remove(link_name)
os.symlink(target, link_name)
else:
raise e
12
원자 수정이 필요한 경우 링크 해제가 작동하지 않습니다.
더 나은 솔루션은 새 임시 심볼릭 링크를 만든 다음에 그것을 이름을 변경하는 것이 하나의 기존 :
당신은 할 확인할 수 있습니다확실히 올바르게 너무 업데이트 된
os.symlink(target, tmpLink)
os.rename(tmpLink, linkName)
:
if os.path.realpath(linkName) == target:
# Symlink was updated
os.rename에 대한 설명서에 따르면 Windows에서 심볼 링크를 원자 적으로 변경할 수있는 방법이 없을 수 있습니다. 이 경우 삭제하고 다시 만듭니다.
0
e.errno는 = errno.EEXIST 그런 다음 오류 숨기려하지 않을 때 경우에 인상 명령을 추가하는 것을 잊지 마십시오!
if e.errno == errno.EEXIST:
os.remove(link_name)
os.symlink(target, link_name)
else:
raise
관련 문제
- 1. 파이썬에서 심볼릭 링크 복사하기
- 2. Windows의 심볼릭 링크?
- 3. 파이썬에서 '../../'경로 수정하기
- 4. 파이썬에서 정수로 비트 수정하기
- 5. 파이썬에서 .txt 수정하기
- 6. 영어로 말하기/수정하기 파이썬에서
- 7. 파이썬에서 plist 수정하기
- 8. 루트 링크 외부의 심볼릭 링크
- 9. android : 심볼릭 링크 결정
- 10. 심볼릭 링크 제거
- 11. 심볼릭 링크 된 Rsync
- 12. Windows의 심볼릭 링크
- 13. Kohana의보기에 대한 심볼릭 링크
- 14. 심포니 심볼릭 링크 문제
- 15. 심볼릭 링크 문제
- 16. 카피스트라의 심볼릭 링크 문제?
- 17. XAMP와의 심볼릭 링크 사용
- 18. File.Copy() 및 심볼릭 링크
- 19. 심볼릭 링크 확인
- 20. 심볼릭 링크 한도 - Windows
- 21. TortoiseSVN을 심볼릭 링크
- 22. Windows에서의 심미안 심볼릭 링크
- 23. 찾기에서 심볼릭 링크 생성
- 24. 심볼릭 링크 이상한 문제
- 25. 서버에 심볼릭 링크 업로드하기
- 26. 파이썬에서 심볼릭 링크의 이름 바꾸기
- 27. 파이썬에서 bash의 pwd가 심볼릭 링크를 확장합니다.
- 28. .htaccess 또는 심볼릭 링크 (심볼 링크)
- 29. 네트워크를 통한 심볼릭 링크 복사
- 30. Rsync는 심볼릭 링크 만 생성합니다.
파이썬 3.3이를'os.replace' POSIX 및 Windows 시스템에서 동일한 동작을 제공하기 위해'os.rename' 대신 사용할 수 있습니다. – Tom