:: python

python :: shutil.copy 리눅스 네트워크 드라이브로 파일 복사 시 WinError 해결

토람이 2021. 12. 30. 23:50

파이썬 스크립트를 작성, 실행하여

로컬(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

https://toramko.tistory.com/entry/python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%8C%8C%EC%9D%BC%ED%8F%B4%EB%8D%94-%EB%B3%B5%EC%82%AC-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