파이썬 스크립트를 작성, 실행하여
로컬(Windows) -> 네트워크 드라이브(Z:)(Linux) 로 파일을 복사할 때
shutil.copy 부분에서 다음과 같은 에러가 나는 경우가 있다.
[WinError 5] 액세스가 거부되었습니다: 'Z:\\..'
[WinError 3] 지정된 경로를 찾을 수 없습니다: 'Z:\\'
확인해보니 실제 파일은 성공적으로 복사가 되어 있는데도
shutil.copy 부분에서 에러가 발생하는 경우가 나타났다.
1. 권한 설정 살펴보기
이럴 땐 우선 권한 설정을 살펴보아야 한다.
[WinError 5] 액세스가 거부되었습니다
위 에러는 권한 문제가 있을 때 발생한다.
폴더의 보안 설정을 확인해보거나,
파이썬 스크립트 실행 시 cmd 를 관리자(Administrator) 권한으로 실행해본다.
만약 그래도 에러가 난다면?
2. shutil 의 copy 함수를 변경
shutil 의 copy 함수 자체에도 권한 설정하는 부분이 있다.
* 참고 - 파이썬 파일/폴더 복사 shutil copy, copy2, copyfile, copytree
위 포스팅에 자세히 설명되어 있지만
copy 함수에는 copyfile, copymode 함수를 차례로 호출하는 로직이 있다.
copyfile(src, dst, follow_symlinks=follow_symlinks)
copymode(src, dst, follow_symlinks=follow_symlinks)
아래의 copymode 부분에서 문제가 생긴 건데,
정확한 원인은 아직 모르겠지만
윈도우 - 리눅스 네트워크 드라이브간 권한 설정이 뭔가 맞지 않아서 문제가 발생한다고 한다.
해결 방법은
copy, copy2 대신 copyfile 함수를 이용하면 된다.
copyfile 을 사용하면 권한 설정과 관련된 copymode 를 호출하지 않게 되어
복사 후 에러 없이 잘 진행된다.
300x250