PermissionError: [Errno 13] Permission denied Python

Рейтинг: 0Ответов: 1Опубликовано: 23.08.2023

Всем доброго времени суток, на win 11 столкнулся с проблемой что при редактировании файла hosts выскакивает ошибка PermissionError: [Errno 13] Permission denied: 'C:\\Windows\\System32\\drivers\\etc\\hosts'

Пробовал использовать

ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)

Винда спрашивает запустить ли этот файл от имени администратора, нажимаю да, но ошибка повторяется

Вот код:

import ctypes
import sys
import psutil
import customtkinter
import keyboard
from customtkinter import *



#Переменные
blocked_sites = ['www.google.com', 'www.yandex.ru', 'google.com', 'yandex.ru', 'yandex.com', 'www.yandex.ru', 'youtube.com', 'www.youtube.com', 'ya.ru', 'www.ya.ru', 'dzen.ru']

redirect_url = 'https://ilian445.tb.ru/page3'

hosts=r'C:\Windows\System32\drivers\etc\hosts'



#DEFs
#Блокировка
def block():
    #Блокируют клавишы, указанные в ковычках
    keyboard.add_hotkey("alt + f4", lambda: None, suppress =True)
    keyboard.add_hotkey("ctrl+shift+esc", lambda: None, suppress =True)
    keyboard.add_hotkey("ctrl+alt+del", lambda: None, suppress =True)
    keyboard.add_hotkey("win+d", lambda: None, suppress =True)
    keyboard.add_hotkey("win+m", lambda: None, suppress =True)

    #Блокировка сайтов
    with open(hosts, 'r+') as file:
        src= file.read()
        for site in blocked_sites:
            if site in src:
                pass
            else:
                file.write(f"(redirect_url) (site)\n")

#Авторизация
def login():

    #Разблокировка сайтов
    with open(hosts, 'r+') as file:
        src= file.readlines()
        file.seek(0)
        for line in src:
            if not any(site in line for site in blocked_sites):
                file.write(line)
        file.truncate()

#Гостевой режим
def guest():
    print('Login with guest')



#Main def
#Проверка запуска от имени администратора
#if ctypes.windll.shell32.IsUserAnAdmin():
    if __name__ == "__main__":
        main()
#else:
#    ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)

#Настраиваем окно авторизации
customtkinter.set_default_color_theme("green")
app = customtkinter.CTk()
app.wm_attributes("-topmost", 1)
app.resizable(width=False, height=False)
app.overrideredirect(1)
app.geometry("300x420+500+200")

#Рендерим виджеты в окне авторизации
frame_main_page = CTkFrame(app)
password_entry = customtkinter.CTkEntry(app, placeholder_text="Введите пароль")
login_button = customtkinter.CTkButton(frame_main_page, text="Войти", command=login)
guest_button = customtkinter.CTkButton(frame_main_page, text="Гостевой режим", command=guest)
password_entry.pack(expand=1)
frame_main_page.pack(expand=1)
guest_button.pack(expand=1)
login_button.pack(expand=1, pady=2)


#Запускаем окно авторизации
block()
app.mainloop()

Ответы

▲ -1Принят

Чтобы редактировать системный файл нужно больше прав. Я бы скомпилировал прогу и запустил бы её с максимальными правами.