PermissionError: [Errno 13] Permission denied Python
Всем доброго времени суток, на 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()
Источник: Stack Overflow на русском