내 Python 스크립트가 umask를 변경할 수 없는 이유는 무엇입니까?

내 Python 스크립트가 umask를 변경할 수 없는 이유는 무엇입니까?

이건 내 스크립트야

#!/usr/bin/python

import os

print "hello world from python"
os.system("echo 'hello world from bash'")
os.system("umask 055")
os.system("ls -alh > test")

이 코드를 실행하면 test 파일에 대한 권한이 722가 아닌 600으로 설정됩니다. 이유는 무엇입니까?

내 껍질의 Umask는 0077입니다.

답변1

umask이를 실행 하면 system쉘에서 실행됩니다. umask해당 쉘의 마스크가 변경되지만 쉘은 즉시 종료되고 변경 사항이 손실됩니다.

Python 프로세스의 umask를 변경하려면,사용os.umask(),이렇게 됩니다:

현재 숫자 umask를 설정하고 이전 umask를 반환합니다.

이렇게 하면 즉시 종료되는 다른 프로그램이 아니라 실행 중인 프로그램이 변경됩니다.

답변2

이는 완전히 정상적인 동작이지만 원하는 동작이 아닐 수도 있습니다.

이러한 umask 055설정은 호출 전반에 걸쳐 지속되므로 os.systemPython 스크립트의 설정은 변경되지 않으며 os.system()다음 호출에서 호출되는 명령의 설정도 변경되지 않습니다.

당신이 해야 할 일은 이것이다:

import os

old_mask = os.umask(055)
os.system("ls -alh > test")
os.umask(old_mask)

답변3

특정 권한으로 기본 셸 명령을 실행하려면 단일 시스템 호출로 명령을 연결하면 됩니다.

os.system("umask 055")
os.system("ls -alh > test")

이 되다:

os.system("umask 055; ls -alh > test")

또는 이전 명령이 성공적으로 종료된 경우 두 번째 명령을 실행하려는 경우:

os.system("umask 055 && ls -alh > test")

관련 정보