user2716722
user2716722

Reputation: 93

Permission denied running python script with the shebang line in linux

I am trying to run a python script in linux without calling python explicitly. My goal is to have $ myscript.py run my script. Currently calling $ python myscript.py works but I am looking to not have to type the extra command for ease of use. I added the shebang line to the first line of my script to get the proper python call. I have tried both of the following lines and neither has worked for me.

#!/usr/bin/env python2.7
#!/usr/local/bin/python2.7

The problem is that I get the following behavior

$ python2.7 myscript.py    # This will run

$ myscript.py           # This is the error
$ ./myscript.py         # This will also error
: Permission denied     # Error message

When I do ls -ltr on the file I have executable permission for the script and the executable

-rwxrwxr-x 1 uname users   3544 Jul  7 08:46 myscript.py
-rwxr-xr-x 1 root  root 6231413 Jul  7 00:57 /usr/local/bin/python2.7

I can also call python in the command line by typing what is written in either the shebang lines into it.

/usr/bin/env python2.7
/usr/local/bin/python2.7

both run python in the terminal.

I have ran through the following stackoverflow problems and none seem to answer why this problem is happening to me.

bash permission denied for python

Python script: problems with shebang line (unix)

Upvotes: 0

Views: 1866

Answers (2)

SailorDad
SailorDad

Reputation: 21

I had this same problem.

In fact I had two different python files in the same directory. One would execute as > myfile1.py correctly.

The other would not, as in your explanation above

myfile2.py /home/mylogin/PYTHON/myfile2.py: Permission denied.

It turns our I had created one in notepad++ on windows and the other in vi on linux.

jwodder nailed the problem.

Solution was: dos2unix * for all python files in the directory.

Upvotes: 0

user2716722
user2716722

Reputation: 93

Make sure to use LF line endings not CRLF line endings when running on linux! Thank you @jwodder for the suggestion.

I was using sublimetext to edit my files in windows and running the files on the linux machines. I changed the preferences in sublime to use unix line endings (LF) but I already wrote the file in the DOS endings (CRLF). I thought it would switch over the line endings for me. My assumption was wrong. I converted them all to LF and the script ran as expected.

Upvotes: 1

Related Questions