Monday, May 6, 2024
 Popular · Latest · Hot · Upcoming
9
rated 0 times [  9] [ 0]  / answers: 1 / hits: 6204  / 3 Years ago, wed, september 29, 2021, 7:40:05

I think I am misunderstanding something here. I have made an easy python testing file to see how permissions affect the use of python files. I did so in order to be able to answer 64bit ubuntu 12.04 python cannot run an existing python file



SetUp



I have made a test.py file with the contents



print 'I am working'


Test case 1



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



  • How come python is executing this file even though I did not do chmod +x test.py?



Test case 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


So apparently python only needs read permission in order to execute my file?



Test case 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


Write permissions are insufficient (and for the record, only executable permissions are insufficient as well).




  • How come python executes files without executable permissions?


More From » permissions

 Answers
3

Yes, Python only requires the file contents to be read. Recall that Python is an interpreted language (like PHP, Ruby, etc.) and just processes the contents of that file, rather than executing it; python is the executable here!


For proper background information; note that you can run scripts two ways:



  • Calling the interpreter with the file as input/argument does not require other than read permissions, e.g.:


     python myscript.py


  • Run the script by its shebang does require the executable bit set, because it would start a new process, the Python interpreter.


     ./myscript.py

    The shebang (first line in the file) should then be something like


     #!/usr/bin/env python

    to define the interpreter for this file.




N.B. Such a shebang line is also a comment in Python when run in the former form (and thus ignored), so it would work both ways. Could be useful for users in case a different interpreter version is desired for a single run, e.g. python3.10 myscript.py if you don't like the default python. That's why you'll probably see the latter form to be fairly common in any entrypoint/script.


[#27840] Thursday, September 30, 2021, 3 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
fishutt

Total Points: 391
Total Questions: 137
Total Answers: 106

Location: Mexico
Member since Tue, Aug 11, 2020
4 Years ago
;