1

저는 Python으로 스크립트를 작성하고 있습니다. 사용자는 scrip이 실행될 폴더를 입력해야합니다. 파일 복사 및 이동이 있고 특정 지점에서 폴더가 삭제됩니다. 따라서 어떤 상황에서도이 스크립트를 루트 폴더에서 실행하지 마십시오. (또는 그 문제에 대한 현재 또는 부모)Python - 유효성 검사 입력이 루트가 아닌 실제 폴더입니다.

그래서 이것을 검증해야합니다. 하지만 "/" "./" ".".. "등의 입력은 모두 os.path.isdir()을 사용하여 완벽하게 유효하고 기존의 폴더이므로 모두 어떻게해야합니까?

이러한 시스템 폴더 기호에 대한 입력을 수동으로 확인해야합니까? 또는 입력이 실제 존재하는 폴더인지 확인하기위한 더 좋은 방법 (기존 기능일까요?)이 있습니까? (루트, 현재, 부모 등 ...)

답변

5

원하는 시스템이나 기호 폴더가 아닌지 확인하려면 을 정규화하십시오. 경로를 절대 경로로 지정하십시오. 당신은 아마도 심볼릭 링크를 제거하려면 :

import os.path 

normalized = os.path.realpath(os.path.absolute(path)) 
if normalized == '/': 
    raise ValueError("Can't use root as a destination") 

경로가 절대 만드는 것은 현재 또는 부모 경로 참조,뿐만 아니라 두 배로 구분을 없애줍니다.

1

경로에서 '..'를 금지하거나 abspath을 사용하여 실제 경로를 가져옵니다.