복붙노트

[PYTHON] 파이썬에서 os.makedirs로 dir을 만들 때 사용 권한 문제

PYTHON

파이썬에서 os.makedirs로 dir을 만들 때 사용 권한 문제

난 단순히 업로드 된 파일을 처리하고 작업 시간에 이름을 시스템 타임 스탬프로 쓰려고합니다. 문제는 전체 권한 (777)으로 해당 디렉토리를 만들고 싶지만 할 수 없다는 것입니다. 다음 코드를 사용하면 만든 디렉터리에 755 개의 사용 권한이 있습니다.

def handle_uploaded_file(upfile, cTimeStamp):
    target_dir = "path_to_my_working_dir/tmp_files/%s" % (cTimeStamp)
    os.makedirs(target_dir, mode=0777)

아무도 나 도와 줄 수 없어? 많은 감사합니다.

해결법

  1. ==============================

    1.공식 python 문서에 따르면 os.makedirs 함수의 mode 인수는 일부 시스템에서는 무시 될 수 있으며 무시되지 않는 시스템에서는 현재 umask 값이 마스크됩니다.

    공식 python 문서에 따르면 os.makedirs 함수의 mode 인수는 일부 시스템에서는 무시 될 수 있으며 무시되지 않는 시스템에서는 현재 umask 값이 마스크됩니다.

    어느 쪽이든, os.chmod 함수를 사용하여 모드를 강제로 0777 (0777 구문 오류가 발생했습니다) 할 수 있습니다.

  2. ==============================

    2.os.mkdir ()이 현재 프로세스의 umask를 사용하기 때문에 문제가 발생합니다 (문서보기, 여기 참조). umask를 무시하려면 다음과 같이해야합니다.

    os.mkdir ()이 현재 프로세스의 umask를 사용하기 때문에 문제가 발생합니다 (문서보기, 여기 참조). umask를 무시하려면 다음과 같이해야합니다.

    import os
    try:
        original_umask = os.umask(0)
        os.makedirs('full/path/to/new/directory', desired_permission)
    finally:
        os.umask(original_umask)
    

    귀하의 경우, desired_permission이 0777 (8 진수, 문자열이 아님)이되어야합니다. 대부분의 다른 사용자는 0755 또는 0770을 원할 것입니다.

  3. ==============================

    3.유닉스 시스템의 경우 (모드가 무시되지 않을 때) 제공된 모드는 현재 사용자의 umask로 먼저 마스크 처리됩니다. 이 코드를 실행하는 사용자의 umask를 수정할 수도 있습니다. 그러면 os.chmod () 메서드를 호출 할 필요가 없습니다. umask를 수정하지 않고 os.makedirs 메소드로 둘 이상의 디렉토리를 작성하지 않으면 작성된 폴더를 식별하고 os.chmod를 적용해야합니다.

    유닉스 시스템의 경우 (모드가 무시되지 않을 때) 제공된 모드는 현재 사용자의 umask로 먼저 마스크 처리됩니다. 이 코드를 실행하는 사용자의 umask를 수정할 수도 있습니다. 그러면 os.chmod () 메서드를 호출 할 필요가 없습니다. umask를 수정하지 않고 os.makedirs 메소드로 둘 이상의 디렉토리를 작성하지 않으면 작성된 폴더를 식별하고 os.chmod를 적용해야합니다.

    나를 위해 다음과 같은 함수를 만들었습니다.

    def supermakedirs(path, mode):
        if not path or os.path.exists(path):
            return []
        (head, tail) = os.path.split(path)
        res = supermakedirs(head, mode)
        os.mkdir(path)
        os.chmod(path, mode)
        res += [path]
        return res
    
  4. from https://stackoverflow.com/questions/5231901/permission-problems-when-creating-a-dir-with-os-makedirs-in-python by cc-by-sa and MIT license