Запуск кода от имени администратора

Пытаюсь открыть файл, который требует прав администратора в python через open().

Пытался открыть через CMD с правами администратора, создавал батник для открытия с правами администратора, открывал IDE с правами администратора, но ничего не помогло.

Подскажите пожалуйста, как открыть файл с правами администратора


Ответы (4 шт):

Автор решения: userpy

Если сделать его исполняемым файлом (.exe) pyinstaller, то сможешь запустить его от имени Администратора.

→ Ссылка
Автор решения: Cowboyserg

Это было больно, но нашелся костыль, который может помочь

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())

То есть вы копируете файл к которому нет разрешения к себе в проект, после чего спокойно открываете скопированный файл. Получилось реализовать с системным файлом.

→ Ссылка
Автор решения: gil9red

Чтобы код был запущен от админа, нужно, чтобы интерпретатор питона тоже был от админа.

Взял код, что проверяет режим доступа:

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):

  • Добавьте в него запуск питона с скриптом
  • Создайте ярлык батника
  • В настройках ярлыка указать запуск от админа
→ Ссылка
Автор решения: Kers

Можно реализовать и автоматический перезапуск скрипта для 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. А дальше перезапуск с запросом прав админа.

→ Ссылка