Por que meu script python não pode mudar umask?

1

Este é o meu script

#!/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")

Se eu executar este código, as permissões do teste de arquivo não serão definidas como 722, mas como 600. Qual poderia ser o motivo?

o Umask da minha concha é 0077.

    
por Shaels 17.07.2014 / 06:44

3 respostas

2

Quando você executa umask com system ele é executado em um shell: umask altera a máscara desse shell, mas o shell termina imediatamente e a alteração é perdida.

Para alterar a umask do seu processo em Python, use os.umask() , que vai:

Set the current numeric umask and return the previous umask.

Dessa forma, a alteração será feita no seu programa em execução, em vez de outro programa que morre imediatamente depois.

    
por 17.07.2014 / 07:01
2

Esse é um comportamento perfeitamente normal, mas provavelmente não é o que você pretende.

As configurações de umask 055 estão lá pela duração da chamada os.system , portanto elas nunca alteram as configurações do script Python e certamente não o comando chamado na próxima chamada os.system() .

O que você deve fazer é algo como:

import os

old_mask = os.umask(055)
os.system("ls -alh > test")
os.umask(old_mask)
    
por 17.07.2014 / 06:59
0

Se você deseja que um comando shell subjacente seja executado com determinadas permissões, seria possível fazer isso encadeando os comandos em uma única chamada de sistema.

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

Torna-se:

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

ou, se você deseja apenas executar o segundo comando se o anterior saiu com sucesso:

os.system("umask 055 && ls -alh > test")
    
por 29.10.2014 / 09:37