Por que um arquivo python é executável, mesmo que suas permissões sejam 644?

2

Eu acho que estou entendendo mal alguma coisa aqui. Eu fiz um arquivo de teste fácil em python para ver como as permissões afetam o uso de arquivos python. Eu fiz isso para poder responder 64bit ubuntu 12.04 python não pode executar um arquivo python existente

SetUp

Eu fiz um arquivo test.py com o conteúdo

print 'I am working'

Caso de teste 1

ls -al test.py 
-rw-r--r-- 1 joey joey 25 Dec 24 11:11 test.py
python test.py
I am working
  • Por que o python está executando esse arquivo, mesmo que eu não tenha feito chmod +x test.py ?

Caso de teste 2

chmod 400 test.py
ls -al test.py 
-r-------- 1 joey joey 25 Dec 24 11:11 test.py
python test.py
I am working

Então, aparentemente python só precisa de permissão de leitura para executar o meu arquivo?

Caso de teste 3

chmod 200 test.py
ls -al test.py 
--w------- 1 joey joey 25 Dec 24 11:11 test.py
python test.py
python: can't open file 'testo.py': [Errno 13] Permission denied

As permissões de gravação são insuficientes (e, para registro, somente as permissões executáveis também são insuficientes).

  • Como o python executa arquivos sem permissões executáveis?
por don.joey 24.12.2013 / 11:20

2 respostas

6

Sim, o Python exige apenas que o conteúdo do arquivo seja lido. Lembre-se que o Python é uma linguagem interpretada (como PHP, Ruby, etc.) e apenas processa o conteúdo desse arquivo, em vez de executá-lo; python é o executável aqui!

Para informações básicas apropriadas; Observe que você pode executar scripts de duas maneiras:

  • Chamar o interpretador com o arquivo como entrada / argumento não requer outras permissões além das permissões de leitura, por exemplo:

    python myscript.py
    
  • Executar o script pela shebang faz exigir o bit executável definido .

    ./myscript.py
    

    O shebang (primeira linha no arquivo) é então algo como

    #!/usr/bin/env python
    
por gertvdijk 24.12.2013 / 11:47
1

"python só precisa de permissão de leitura" para ler o conteúdo do seu arquivo e processar o código.

seu usuário pode executar python. então python pode ler o arquivo (por causa de 400). Se você deseja executar um arquivo diretamente como "./testo.py", então você precisa de permissões de execução do seu arquivo.

    
por Dian Nedelchev 24.12.2013 / 11:31