- Python CGIHTTPServer crashes with «OSError: [Errno 13] Permission denied»
- 4 Answers 4
- Fix Python PermissionError: [Errno 13] Permission denied
- You specify a path to a directory instead of a file
- The file is already opened elsewhere (in MS Word or Excel, .etc)
- You don’t have the required permissions to open the file
- Conclusion
- Take your skills to the next level ⚡️
- About
- Search
- Errno 13 Permission denied
- 6 Answers 6
- Python [Errno 13] Permission denied:
Python CGIHTTPServer crashes with «OSError: [Errno 13] Permission denied»
It would be useful to see the shebang line from test.py . That error may arise if the defined interpreter is not a valid executable.
4 Answers 4
Are you, by any chance, running the process as root?
If you use the source, you will see in CGIHTTPServer.py , just before calling execve :
try: os.setuid(nobody) except os.error: pass
That is, it will run the CGI script as nobody, if it is able to change the UID, that is if it is root. If it is not root, this call will most likely fail, and pass on.
So my guess is that you are running the server as root, so the script is run as nobody, but this user doesn’t have access to the script. Which is expected, as you say that it is in your home dir.
Two solutions that I can think of:
- The recommended: do not run the server as root!
- The workaround: copy the script to a directory where nobody can read it ( /tmp for example).
Personally, unless there’s some reason I’m unaware of, I’d recommend using subprocess.Popen instead of os.execve. I have run into Errno 13 before, trying to start a .app with Popen([‘open execName.app’]). I had to use Popen([‘execName.app/Contents/MacOS/execName’, ‘arg1’, ‘arg2’. ]) instead. Don’t know if that helps, but give it a shot.
I ran into the same problem from ubuntu Linux. Followed the solution by «Mike», with modification. Instead doing chmod of the «/usr» which has several folders, change the permissions of the folder containing executable file that was denied. (you can check that server would run fine when loading a static html file in the same location, and shows error only when script is run).
cd /pathto/folder/with/deniedscript sudo chmod -R 755 ./
Now the script has permission, so should run fine. Note that -R gives the permission to all files in this folder(and subfolders if any).
When running on Windows the files run right out of the command prompts.
For Linux and Windows users that’s not the case!
I get the following error:
Traceback (most recent call last): File «/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/http/server.py», line 1158, in run_cgi os.execve(scriptfile, args, env) PermissionError: [Errno 13] Permission denied:
You’ll need to the following to resolve these issues:
1) Ensure shebang is adjusted for Python 3 running on Linux and Mac OSX systems:
2) Since the original executable files were written on windows they’ll have hidden ‘\r’ in the files that must be removed. Here are three possible ways: a) In terminal command line type: tr -d ‘\r’ < input file name >output file name (just rename the output file a new name —> erase old file —> then rechange output filename back to original) b) In terminal command line type: cat inputfile | col -b > outputfile (just rename the output file a new name —> erase old file —> then rechange output filename back to original) c) Download dos2unix, then type in terminal command line: dos2unix input file name
3) Make file executable: In terminal command line type: a) chmod 755 filename or b) chmod +x filename or chmod a+x filename
For Mac OSX users it’s almost the same:
Based on the apache.org wiki page: https://wiki.apache.org/httpd/13PermissionDenied It says that you have to make every executable from file location traversing all the away up to the /Users root directory.
You’ll have to do the following.
3) In terminal command line:
a) type command: `cd /Users` b) type command: `sudo chmod -R 755`
Now you can run your server .py file via:
and the input file via normal:
Now you should be all good to go with no more permission errors! You can make necessary adjustments to shebang and command line if running python 2.
Fix Python PermissionError: [Errno 13] Permission denied
This article will help you to resolve the issues above and fix the PermissionError message.
You specify a path to a directory instead of a file
When you call the open() function, Python will try to open a file so that you can edit that file.
The following code shows how to open the output.txt file using Python:
While opening a file works fine, the open() function can’t open a directory.
When you forget to specify the file name as the first argument of the open() function, Python responds with a PermissionError.
Gives the following output:
Because text_files is a name of a folder, the open() function can’t process it. You need to specify a path to one file that you want to open.
You can write a relative or absolute path as the open() function argument.
An absolute path is a complete path to the file location starting from the root directory and ending at the file name.
Here’s an example of an absolute path for my output.txt file below:
When specifying a Windows path, you need to add the r prefix to your string to create a raw string.
This is because the Windows path system uses the backslash symbol \ to separate directories, and Python treats a backslash as an escape character:
Once you fixed the path to the file, the PermissionError message should be resolved.
The file is already opened elsewhere (in MS Word or Excel, .etc)
Microsoft Office programs like Word and Excel usually locked a file as long as it was opened by the program.
When the file you want to open in Python is opened by these programs, you will get the permission error as well.
See the screenshot below for an example:
To resolve this error, you need to close the file you opened using Word or Excel.
Python should be able to open the file when it’s not locked by Microsoft Office programs.
You don’t have the required permissions to open the file
Finally, you will see the permission denied error when you are trying to open a file created by root or administrator-level users.
For example, suppose you create a file named get.txt using the sudo command:
The get.txt file will be created using the root user, and a non-root user won’t be able to open or edit that file.
To resolve this issue, you need to run the Python script using the root-level user privilege as well.
On Mac or Linux systems, you can use the sudo command. For example:
On Windows, you need to run the command prompt or terminal as administrator.
Open the Start menu and search for “command”, then select the Run as administrator menu as shown below:
Run the Python script using the command prompt, and you should be able to open and write to the file.
Conclusion
To conclude, the error “PermissionError: [Errno 13] Permission denied” in Python can be caused by several issues, such as: opening a directory instead of a file, opening a file that is already open in another program, or opening a file for which you do not have the required permissions.
- Make sure that you are specifying the path to a file instead of a directory
- Close the file if it is open in another program
- Run your Python script with the necessary permissions.
By following these steps, you can fix the “PermissionError: [Errno 13] Permission denied” error and successfully open and edit a file in Python.
Take your skills to the next level ⚡️
I’m sending out an occasional email with the latest tutorials on programming, web development, and statistics. Drop your email in the box below and I’ll send new stuff straight into your inbox!
About
Hello! This website is dedicated to help you learn tech and data science skills with its step-by-step, beginner-friendly tutorials.
Learn statistics, JavaScript and other programming languages using clear examples written for people.
Search
Type the keyword below and hit enter
Errno 13 Permission denied
In python, I am currently experimenting with what I can do with open command. I tried to open a file, and got an error message. Here’s my code:
PermissionError: [Errno 13] Permission denied: 'C:\\Users\\****\\Desktop\\File1'
I looked on the website to try and find some answers and I saw a post where somebody mentioned chmod . 1. I’m not sure what this is and 2. I don’t know how to use it, and thats why I’ve come here.
6 Answers 6
For future searchers, if none of the above worked, for me, python was trying to open a folder as a file.
Check at the location where you try to open the file, if you have a folder with exactly the same name as the file you try to open (the file extension is part of the file name).
And that will perhaps also solve the question. It seems as if C:\Users\****\Desktop\File1 is written as a directory path, not with actually as a file path, since there is no file extension.
Your user don’t have the right permissions to read the file, since you used open() without specifying a mode.
Since you’re using Windows, you should read a little more about File and Folder Permissions.
Also, if you want to play with your file permissions, you should right-click it, choose Properties and select Security tab.
Or if you want to be a little more hardcore, you can run your script as admin.
SO Related Questions:
If nothing worked for you, make sure the file is not open in another program. I was trying to import an xlsx file and Excel was blocking me from doing so.
The problem here is your user doesn’t have proper rights/permissions to open the file this means that you’d need to grant some administrative privileges to your python ide before you run that command.
As you are a windows user you just need to right click on python ide => select option ‘Run as Administrator’ and then run your command.
And if you are using the command line to run the codes, do the same open the command prompt with admin rights. Hope it helps
Python [Errno 13] Permission denied:
I’m attempting to write a quick python script to iterate through all csv files in the current folder and remove the header row from them then store them in a separate folder. The current working directory has four sample csv files and the python script. Once executed the script creates the HeaderRemoved directory. It appears that once the folder is created the code that is attempting to read the files is trying to access the folder but looking at the code I’m not sure why it would be. I’m on a windows machine at the moment.
import csv, os, argparse, string from ctypes import * os.makedirs('HeaderRemoved', exist_ok=True) # Loop through files in the current working directory for csvFile in os.listdir('.'): if not csvFile.endswith('.csv'): continue # Skips non-csv files print ('Removing header from ' + csvFile + '. ') # Read in CSV skipping the first row csvRows = [] csvFileObj = open(csvFile) csvReader = csv.reader(csvFileObj) for row in csvReader: if csvReader.line_num == 1: continue # Skips the first row csvRows.append(row) csvFileObj.close() # Write out the CSV file csvFileObj = open (os.path.join('HeaderRemoved', csvFile), 'w', newline='') for row in csvRows: csvWriter.writerow(row) csvFileObj.close()
Removing header from examplefile_1.csv. Removing header from examplefile_2.csv. Removing header from examplefile_3.csv. Removing header from examplefile_4.csv. Traceback (most recent call last): File "atbs_csv_parse.py", line 14, in csvFileObj = open(csvFile) PermissionError: [Errno 13] Permission denied: 'HeaderRemoved'