Запуск кода от имени администратора
Пытаюсь открыть файл, который требует прав администратора в python через open().
Пытался открыть через CMD с правами администратора, создавал батник для открытия с правами администратора, открывал IDE с правами администратора, но ничего не помогло.
Подскажите пожалуйста, как открыть файл с правами администратора
Ответы (4 шт):
Если сделать его исполняемым файлом (.exe) pyinstaller, то сможешь запустить его от имени Администратора.
Это было больно, но нашелся костыль, который может помочь
import shutil
shutil.copyfile(r"C:\Windows\secret.JSON", r"C:\Users\User\PycharmProjects\secret.JSON")
with open('secret.JSON', mode='r') as f:
print(f.read())
То есть вы копируете файл к которому нет разрешения к себе в проект, после чего спокойно открываете скопированный файл. Получилось реализовать с системным файлом.
Чтобы код был запущен от админа, нужно, чтобы интерпретатор питона тоже был от админа.
Взял код, что проверяет режим доступа:
import ctypes
import os
import traceback
def is_user_admin():
if os.name == 'nt':
try:
# WARNING: requires Windows XP SP2 or higher!
return bool(ctypes.windll.shell32.IsUserAnAdmin())
except:
traceback.print_exc()
print("Admin check failed, assuming not an admin.")
return False
elif os.name == 'posix':
# Check for root on Posix
return os.getuid() == 0
else:
raise RuntimeError("Unsupported operating system for this module: %s" % (os.name,))
print(is_user_admin())
Запускаю CMD и выбираю, что нужно от администратора:
Проверяю, что режим кода от админа:
PS.
Подобное можно сделать для батника (вариант с windows):
- Добавьте в него запуск питона с скриптом
- Создайте ярлык батника
- В настройках ярлыка указать запуск от админа
Можно реализовать и автоматический перезапуск скрипта для windows.
import ctypes
import os
import sys
def is_admin():
""" Проверяем права"""
try:
# Если админ вернет True
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
if is_admin():
# Если админ продолжаем скрипт дальше
input("as Admin!!!\n Press enter...")
else:
# Перезапускаем скрипт с правами админа
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable,
__file__, None, 1)
exit() # выходим из старой версии скрипта
print("your code...")
Проверка админа вынесена в отдельную функцию, без проверка версии ОС так как пример для Win. А дальше перезапуск с запросом прав админа.

