Error 13 permission - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Error 13 permission (/thread-25729.html) |
Error 13 permission - tpolim008 - Apr-09-2020 Hello, Im slowly getting into the game of python and learning its much strict than other languages. Im running into an issue with my script Im working on where when I try to write the file im getting an error 13 ona linux server. The folder in which Im putting the output text into has a permissions of 7777 so anyone can read and write to it. Can anyone help me out as to what I am doing wrong? #! /usr/bin/python3.6 import pymysql import datetime from pncnetworkdata import * from datetime import date try: markets = ["Beltway", "Keystone", "Freedom", "New England"] count = 0 cursorRowCount = 0 recordPrint = "" for HOST in HOSTS: db_con = pymysql.connect(host=HOST, port=3306, user=USERNAME, passwd=PASSWORD, db=DATABASE) sql_select_Query = "SELECT * FROM pncnetwork where id=(SELECT MAX(id) FROM pncnetwork)" cursor = db_con.cursor() cursor.execute(sql_select_Query) records = cursor.fetchall() for row in records: # recordPrint = "" recordPrint += markets[count] + ', ' + str(row[0]) + ', ' + str(row[5]) + "\n" cursorRowCount += cursor.rowcount count += 1 db_con.close() # print ("Total number of rows in pncnetwork is: ", cursorRowCount) print ("\nPrinting each pncnetwork record\n", recordPrint) # This section will print the script to file using current date. def get_filename_datetime(): # Use current date to get a text file name. return "file-" + str(date.today()) + ".txt" #Get full path for writing name = get_filename_datetime() print("NAME", name) path = "/opt/scripts/output" + name print("PATH", path); with open(path, "w") as f: # Write Data to file f.write("\nPrinting each pncnetwork record\n", recordPrint) except Exception as e: print("ERROR ", str(e))the script runs and prints to the console window however im getting this error. [tpolim001@netengsrv01 ~]$ ./pncnetworktest.py Printing each pncnetwork record Beltway, 1330, 2020-04-08_1330 Keystone, 1301, 2020-04-08_1301 Freedom, 1246, 2020-04-08_1246 New England, 1051, 2020-04-08_1051 NAME file-2020-04-09.txt PATH /opt/scripts/outputfile-2020-04-09.txt ERROR [Errno 13] Permission denied: '/opt/scripts/outputfile-2020-04-09.txt' [tpolim001@netengsrv01 ~]$ as you can see the folder has read-write global permissions [tpolim001@netengsrv01 scripts]$ ls -la total 16 drwxr-xr-x 3 root root 115 Apr 9 11:50 . drwxr-xr-x. 8 root root 92 Apr 3 14:16 .. drwsrwsrwt 2 root root 6 Apr 9 11:50 output<<<<<<<<<<<<<<<<<<<<<< -rwxr-xr-x 1 root root 426 Apr 7 14:56 pncnetworkdata.py -rwxr-xr-x 1 root root 2118 Apr 7 14:55 pncnetworkold1.py -rwxr-xr-x 1 root root 2178 Apr 1 14:57 pncnetworkold.py -rwxr-xr-x 1 root root 957 Apr 7 14:56 pncnetwork.py [tpolim001@netengsrv01 scripts]$ RE: Error 13 permission - ibreeden - Apr-09-2020 (Apr-09-2020, 05:49 PM)tpolim008 Wrote: The folder in which Im putting the output text into has a permissions of 7777 so anyone can read and write to itI think there is a 7 too much in your permissions. Now you also have setUID and setGID and sticky bit. You don't want that. Use chmod 777 or 0777. Who is executing the script? Also root? RE: Error 13 permission - tpolim008 - Apr-09-2020 (Apr-09-2020, 06:18 PM)ibreeden Wrote:Any user can run the script, I think I found the issue had two problems and have updated my code to the following. Im not sure if this is the most sensable way to do so but it appears to be working. If you have any change suggestions im open to them(Apr-09-2020, 05:49 PM)tpolim008 Wrote: The folder in which Im putting the output text into has a permissions of 7777 so anyone can read and write to itI think there is a 7 too much in your permissions. Now you also have setUID and setGID and sticky bit. You don't want that. Use chmod 777 or 0777. the file folder is /opt/scripts/output where I have forgot the last / it should have been /opt/scripts/output/ next was I gave two arguments where I guess this write function can only have one, ERROR write() takes exactly one argument (2 given) here is the new code. #! /usr/bin/python3.6 import pymysql import datetime from pncnetworkdata import * from datetime import date try: markets = ["Beltway", "Keystone", "Freedom", "New England"] count = 0 cursorRowCount = 0 recordPrint = "" for HOST in HOSTS: db_con = pymysql.connect(host=HOST, port=3306, user=USERNAME, passwd=PASSWORD, db=DATABASE) sql_select_Query = "SELECT * FROM pncnetwork where id=(SELECT MAX(id) FROM pncnetwork)" cursor = db_con.cursor() cursor.execute(sql_select_Query) records = cursor.fetchall() for row in records: # recordPrint = "" recordPrint += markets[count] + ', ' + str(row[0]) + ', ' + str(row[5]) + "\n" cursorRowCount += cursor.rowcount count += 1 db_con.close() # print ("Total number of rows in pncnetwork is: ", cursorRowCount) print ("\nPrinting each pncnetwork record\n", recordPrint) # This section will print the script to file using current date. def get_filename_datetime(): # Use current date to get a text file name. return "file-" + str(date.today()) + ".txt" #Get full path for writing name = get_filename_datetime() print("NAME", name) path = "/opt/scripts/output/" + name print("PATH", path); with open(path, "w") as f: # Write Data to file f.write (recordPrint) except Exception as e: print("ERROR ", str(e)) |